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