之所以要把面向对象和闭包放在一起写是因为JS是一门支持面向对象的语言,所有我们可能通过面向对象实现的代码都可以转化为闭包,同理凡是可以写闭包实现的的我们都可以写成面向对象。
举一个简单的闭包的例子:
var calcute=function(){
var i=0;
return{
call:function(){
i++;
console.log(i);
}
};
};
var calcute=calcute();
calcute.call();//1
calcute.call();//2
同理用面向对象实现
var speak=function(){
this.i=0;
};
speak.prototype.tell=function(){
this.i++;
console.log(this.i);
};
//初始化对象
var speak=new speak();
speak.tell();//1
speak.tell();//2
或者写成最常见的面向对象
var speak={
i:0,
tell:function(){
this.i++;
console.log(this.i);
},
};
speak.tell();//1
speak.tell();//2
总之我们的目的都是为了延长局部变量的生命周期;
具体做法就是通过函数方法包裹,让局部变量拥有独立的生命周期;
同时将被包裹的环境中的变量和原来的函数环境中的变量联系起来,
这样由于外部的局部变量被里面的函数引用,所以外部局部变量无法销毁,同时我们每次进去的内部函数的变量之间也是相互独立的。