我正在尝试学习创建对象和对象实例的最佳实践。我理解这样做的一种方法是使用闭包来返回一个全部包裹为IIF的对象:
myApp2 = (function() {
var count = 1;
return {
getCount: function(){return count},
incCount: function(){count++}
};
}())
var test = myApp2
console.log(test.getCount()); // outputs 1
console.log(test.incCount()); // increment count by 1
console.log(test.getCount()); // outputs 2
var test2 = myApp2 // I thought this would create new context
console.log(test2.getCount());// outputs 2, not 1 as expected
请纠正我的理解..
答案 0 :(得分:1)
如果你想拥有不同的对象,可以使用函数而不是IIFE,并为每个对象调用一次:
function myApp2 () {
var count = 1;
return {
getCount: function(){return count},
incCount: function(){count++}
};
}
var test = myApp2();
console.log(test.getCount()); // outputs 1
console.log(test.incCount()); // increment count by 1
console.log(test.getCount()); // outputs 2
var test2 = myApp2(); // creates new object
console.log(test2.getCount());// outputs 1
答案 1 :(得分:1)
如果您查看myApp2
的定义,您会发现它是函数调用的结果。因此,您只需创建指向test2
指向的同一对象的另一个引用myApp2
,与test
相同。因此,调用test2
上的函数与调用test
上的函数相同,因为它们都引用同一个对象。