《悟透javascript》-摘抄3.0

来源:互联网 发布:mac傻瓜剪辑视频软件 编辑:程序博客网 时间:2024/03/29 13:22

闭包。
看以下代码:

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 Gateshello,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 oldSteve Jobs is 48 years old

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

原创粉丝点击