JS的面向对象和闭包

之所以要把面向对象和闭包放在一起写是因为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

总之我们的目的都是为了延长局部变量的生命周期;

具体做法就是通过函数方法包裹,让局部变量拥有独立的生命周期;

同时将被包裹的环境中的变量和原来的函数环境中的变量联系起来,

这样由于外部的局部变量被里面的函数引用,所以外部局部变量无法销毁,同时我们每次进去的内部函数的变量之间也是相互独立的。

转载于:https://my.oschina.net/fusublog/blog/1927781

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值