闭包和面向对象设计的等价实现举例
下面这段是闭包的代码:
var extent = function(){
var value = 0;
return {
call: function(){
value++;
console.log(value);
}
}
};
var extent = extent();
extent.call(); // 输出:1
extent.call(); // 输出:2
extent.call(); // 输出:3
转换成面向对象的写法是:
var extent = {
value: 0,
call: function(){
this.value++;
console.log(this.value);
}
};
extent.call(); // 输出:1
extent.call(); // 输出:2
extent.call(); // 输出:3
原型链写法:
var extent = function(){
this.value = 0;
};
Extent.prototype.call = function(){
this.value++;
console.log(this.value);
}
var extent = new Extent();
extent.call();
extent.call();
extent.call();
博客参考自JavaScript设计模式与开发实践,[p40-p41]