闭包机制

闭包机制

闭包机制模型代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function Person(firstName,lastName,age){
//私有变量
var _firstName = firstName;
var _lastName = lastName;
//公共变量
this.age = age;
this.getName = function(){
return(firstName+" " +lastName);
};
this.sayHello(){
alert("Hello,I'm "+firstName+" "+lastName);
}
};
var Bill = new Person("Bill","Gates",54);
var Jobs = new Person("steves","Jobs",54);
Bill.sayHello();
Jobs.ayHello();
alert(Bill.getName()+" "+Bill.age);
alert(Bill._firstName);//这里不能访问到私有变量

说明

在构造函数里定义了私有成员,公共属性,还有方法,这要可以模拟保护私有成员。

闭包

所谓闭包就是在构造函数体内定义另外的函数作为目标对象的方法函数,而这个对象的方法函数反过来引用外层函数体中的临时变量。这使得只要目标对象在生存期内始终能保持其方法,就能简介的保持原构造函数体当时用到的临时变量值。尽管最开始的构造函数调用已经结束,临时变量的名称也消失了,但是目标对象的该方法却一直能够引用到该变量的值,而且该变量的名称只能通过这种方法来访问,及时再次调用相同的构造函数,只会生成新的方法,和上次的完全独立。
——摘录《悟透javaScript》一书的解释

缺点

这种间接保持变量值的机制,会给javaScript的垃圾回收机制制造难题,特别是在对象间复杂的循环引用时,这会对垃圾回收造成很大的麻烦。

收获

这种方式可以保护对象的私有变量,这个变量虽然构造方法已经调用完毕,但是还是能访问到,通过内部方法访问,并且只能通过该方法访问。