以下两种模式黑白有区别吗?自行执行第一个有什么好处?
var testModule = (function () {
var counter = 0;
return {
incrementCounter: function () {
return counter++;
},
resetCounter: function () {
console.log( "counter value prior to reset: " + counter );
counter = 0;
}
};
})();
testModule.incrementCounter(); // 1
下一步:
var testModule2 = function () {
var counter = 0;
return {
incrementCounter: function () {
return counter++;
},
resetCounter: function () {
console.log( "counter value prior to reset: " + counter );
counter = 0;
}
}
}
var result = testModule2();
result.incrementCounter(); //1
最佳答案
第一个是单例——你当然可以克隆它,但首先会很尴尬,而且不会复制私有(private)变量:所有克隆对象的所有方法仍然有效使用相同的 var counter
。这就是为什么它适合做类似服务的东西。
第二个实际上是构造函数的变体 - 它适用于基于单个模板创建多个事物。它的缺点(与经典的基于 prototype
的模板相比)是每次调用 testModule2
时都会重新创建其中定义的所有函数。它的优势 - 私有(private)变量,每个新对象都有一个独立的集合(请注意克隆使用第一种方法创建的对象的区别)。
关于Javascript - 模块模式差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22767044/