本文内容全部参考javascript忍着秘籍
function Ninja() {
var feints=0;
this.getFeints=function () {
return feints;
}
this.fint=function () {
feints++;
}
}
var ninja1 = new Ninja();
ninja1.fint();
ninja1.fint();
console.log(ninja1.getFeints());//2
var ninja2 = new Ninja();
console.log(ninja2.getFeints());//1
Ninja构造函数创建的实例对象ninja1调用了两次递增方法,所以值为2
Ninja构造函数创建的实例对象ninja2没有调用递增方法,具有独立的feints
getFeints和fint函数是构造函数Ninja的内部函数,在Ninja构造函数外部访问构造函数内部的getFeints和fint函数,这样已经创建了包含feints变量的闭包。
通过构造函数Ninja创建的实例对象均获得各自的方法,各自的实例方法包含各自的变量。
通过的是实例对象调用getFeints函数访问访问的私有变量,而不是对象直接访问的
所以说javascript没有真正的私有变量,只是可以通过闭包实现一直可以接受私有变量的方案!!
总结:通过闭包可以访问创建闭包是所处环境中的全部变量。
闭包高级功能:通过构造函数内的变量以及构造方法模拟对象的私有属性
处理回调函数,简化代码