《悟透javascript》-摘抄3.0

时间:2022-09-29 22:44:21

闭包。
看以下代码:

function Person(firstName,lastName,age){

}

这里定义一个人的方法,具有姓、名、年龄三种属性。
随后:

    var_firstName=firstName;
var _lastName=lastName;
this.age=age;
this.getName=function(){
return(firstName+" "+lastName)
};

内部定义了一个获取姓名的方法getName();
然后定义一个sayhello的方法;

    this.SayHello=function(){
console.log("hello,I'm "+ firstName+" "+ lastName)
};

这个Person暂时只有这几个。
下面新建两个对象,BillGates和SteveJobs

var BillGates=new Person("Bill","Gates",52);
var SteveJobs=new Person("Steve","Jobs",48);

此时,如果写下如下代码:

BillGates.SayHello();
SteveJobs.SayHello();

会出现以下结果:

hello,I'm Bill Gates
hello,I'm Steve Jobs

当然,每个对象也是可以调用自己的属性的。

console.log(BillGates.getName()+" is "+BillGates.age +" years old");
console.log(SteveJobs.getName()+" is "+SteveJobs.age +" years old");

这里将输出以下:


Bill Gates is 52 years old
Steve Jobs is 48 years old

这里,在一个函数内一次定义了私有成员(姓名),公共属性,以及可用的方法。特别是闭包机制可以模拟对私有成员的保护机制。
解释一下闭包,就是在够高函数体内 定义另外的函数 作为目标对象的方法函数, 这个方法函数反过来引用外层函数体中的临时变量。
这使得目标对象在生存期内始终能保持方法,也能间接保持原构造函数体当时用到的临时变量。