使用闭包与对象中的公共方法模拟私有方法

时间:2014-04-14 15:36:28

标签: javascript oop closures private

由于MDN states闭包用于模拟模块模式的私有方法

var counter = (function () {
    var privateCounter = 0;

    function changeBy(val) {
        privateCounter += val;
    }

    return {
        increment: function () {
            changeBy(1);
        },
        decrement: function() {
            changeBy(-1);
        }
    };
}());

但是,我们也可以创建一个类,而不是使用模块模式。使用模块模式创建类有什么好处?

function Counter() {
    var privateCounter = 0;

    function changeBy(val) {
        privateCounter += val;
    }

    this.increment = function() {
        changeBy(1);
    };

    this.decrement = function() {
        changeBy(-1);
    };
}

var counter = new Counter();

1 个答案:

答案 0 :(得分:3)

  

使用模块模式创建类有什么好处?

使用模块模式创建类的优点是可以创建类的多个实例:

var counter1 = new Counter;
var counter2 = new Counter;

每个实例都有自己的一组私有变量。

另一方面,当您使用模块模式时,您只创建一个对象(通常称为单例,命名空间或模块)。同样,它拥有自己的一组私有变量。

模块模式和类都有自己的用途。模块模式对于创建模块,管理器对象(其中只有一个实例必须存在)等非常有用。

类模式对于创建相同类型的新数据结构很有用。例如,链表数据结构将被建模为类,而不是单例或模块。