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

如何实现私有静态成员

8.私有静态成中
===========

**知识点**
1.私有静态成员的特征
2.创建与访问方式

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

1.私有静态成员的特征
----------------
- 被同一构造函数的所有实例所共享
- 构造函数外部不可访问该成员

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

2.创建与访问方式
-------------
- 创建特权方法返回私有静态成员

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

### 示例代码: code/demo08.html

```html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>私有静态成员</title>
</head>
<body>
<script>
    var Demo = (function (){
        //私有静态成员: 可以将前一次的调用结果保存,并被下一次调用引用
        var counter = 0;

        // 返回的函数,做为新构造函数, 除第一次实例化,以后都是实例化的这个函数
        return function () {
            console.log( counter += 1);
        }
    }());

    // 创建实例
    var obj1 = new Demo();  // 1
    var obj2 = new Demo();  // 2
    var obj3 = new Demo();  // 3

    /**
     * 单步调试后发现
     * 1. 第一次实例化时, counter被初始化,以后将不再读取该值
     * 2. 每一次new实例化的是自执行函数返回值,仍是函数
     * 3. 而该函数访问了父作用中的counter,形成了一个闭包
     * 4. 每一次调用执行的结果,都会保存在闭包变量中
     * 5. 实际上闭包充当缓存器,或者保存了前一次的调用结果
     */

    // 显然每一次的执行,通过控制台查看是不合适的,应该创建一个特权方法来返回私有静态成员
    // 下面来简单改写上面的案例

    var Demo1 = (function () {
        // 私有静态成员
        var counter = 0;

        // 新构造函数(除第一次外被实例化的)
        NewDemo1 = function () {
            counter += 1;
        };

        // 特权方法(可以访问私有成员)
        NewDemo1.prototype.getCounter = function () {
            return counter;
        };

        // 覆盖这个构造函数
        return NewDemo1;
    }());

    var newObj1 = new NewDemo1();
    console.log( newObj1.getCounter() );  // 1

    var newObj2 = new NewDemo1();
    console.log( newObj2.getCounter() );  // 2

    var newObj3 = new NewDemo1();
    console.log( newObj3.getCounter() );  // 1

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


任务

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