使用闭包和IIF创建对象实例

时间:2015-03-24 18:39:36

标签: javascript

我正在尝试学习创建对象和对象实例的最佳实践。我理解这样做的一种方法是使用闭包来返回一个全部包裹为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

请纠正我的理解..

2 个答案:

答案 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上的函数相同,因为它们都引用同一个对象。