如何实现私有静态成员
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>
```