点击切换帐号登陆
帐号密码登陆

构造函数的私有属性与特权方法

3.构造函数的私有属性与特权方法
=========================

**知识点**
1.私有属性
2.特权方法

> 注: 因为js原生并不支持以上特征,所以必须通过其它语法模拟来实现
-----------------------------------------------------

1.私有属性
--------
- 即通过构造函数实例不可访问的属性
- 通过函数*局部变量*来模拟

-----------------------------------------------------

2.特权方法
--------
- 即可以访问函数局部变量的函数
- 通过:*闭包*来模拟

-----------------------------------------------------

### 示例源码: code/demo03.html

```html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>构造函数的私有属性与特权方法</title>
</head>
<body>
<script>
    // javascript并不像其它语言那样有私有,保护,公共等属性成员
    // 但是可以通过一些技术来模拟来实现
    // 正常情况下, 对象中所有成员,外部都可以访问的

    // 构造函数
    var Stu1 = function (name) {
        this.name = name;
        this.getName = function () {
            return this.name;
        };
    };

    var stu1 = new Stu1('Peter');
    console.log(stu1.name);
    console.log(stu1.getName());

    // 现在假定构造函数中的 name 是私有成员, 不允许外部通过对象来访问,怎么办?
    // 直接将 name 声明为函数中的局部变量即可: var name = name; 外部就无法访问了
    // 而函数内的方法,仍可以访问这个局部变量, 这就形成了一个闭包
    // 闭包,是指一个函数允许访问另外一个函数中的成员,广义上讲,闭包可以访问声明它的作用域中的所有成员
    // 关于闭包的知识,如果你感觉到陌生, 请观看我的另一个关于函数和闭包的教学视频

    // 下面我们来改造 Stu构造函数
    var Stu2 = function (userName) {
        // 私有成员, this 改成: var
        var name = userName;

        // 因为这个内部方法可以访问私有成员,所以它还有一个清新脱俗的名称: "特权方法"
        this.getName = function () {
            // 闭包可访问到私有成员name,并返回
            return name;
        };
    };

    var stu2 = new Stu2('Zhu');

    // 外部是不能直接访问到函数变量的
    console.log(stu2.name); // undefined

    // 构造函数中的闭包,提供了私有成员的访问接口
    console.log(stu2.getName()); // undefined


</script>
</body>
</html>
```


任务

?不会了怎么办
无数据提示暂无评论哟...我要评论
网站导航
网站首页
学习路径
视频教程
开发软件
旗下子站
php中文网
phpstudy
技术文章
文档工具
关于我们
企业合作
人才招聘
联系我们
讲师招募
QQ交流群
QQ交流群
微信公众号
微信公众号