闭包和面向对象设计的等价实现举例

下面这段是闭包的代码:

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]