闭包:指一个函数允许访问另一个函数中的成员,广义来说,闭包可以访问声明它的作用域中的所有成员。
1.构造函数的私有属性和特权方法
//构造函数
var Stu1 = function(name){
this.name = name;
this.getName = function () {
return this.name;
};
}
var stu1 = new Stu1('Ann');
console.log(stu1.name);//Ann
console.log(stu1.getName());//Ann
------------------------------------------------------------------
var Stu2 = function(username){
//私有成员,用'var'
var name = username;
//函数内部可以访问私有属性,形成了一个闭包
//这个方法还有一个名称:特权方法
this.getName = function () {
return name;
};
}
var stu2 = new Stu2('Peter');
//外部不能直接访问到函数变量
console.log(stu2.name);//undefined
//构造函数中的闭包,提供了私有成员的访问接口
console.log(stu2.getName());//Peter
2.对象字面量的私有属性和特权方法
//创建一个对象,创建在全局
var obj2 = null;//null就是对象,比{}好
//创建自执行函数
(function(){
//私有成员
var name = "Peter";
//公共方法:给全局对象变量obj2赋值
obj2 = {
//特权方法
getName:function() return name; }
}
}());
// 外部对象只能通过访问这个特权方法来访问私有属性
console.log(obj2.getName())
//换一种语法风格
var obj3 = (function (){
// 私有成员
var name = 'dsj';
// 公共方法, 给全局变量obj3赋值
return {
//特权方法
getName: function () { return name; }
};
}());
//外部对象只能通过访问这个特权方法来访问私有属性
var res2 = obj3.getName();
3.私有静态成员
//创建特权方法,访问私有静态成员/
var Demo1 = (function(){
//私有静态成员: 可以将前一次的调用结果保存,并被下一次调用引用
var counter = 0;
//新构建函数
var NewDemo1 = function(){
counter += 1;
};
//特权方法;在这个新构建函数的原型上创建
NewDemo1.prototype.getCounter = function(){
return counter;
};
return NewDemo1;
}());
var newObj1 = new Demo1();
console.log(newObj1.getCounter());
var newObj2 = new Demo1();
console.log(newObj2.getCounter())
分享来自https://www.html.cn/js/javascript/
网友评论