1

如何在我的单例类中设置默认值。我在我的类中有这本字典,其中变量名“myVar”被赋值为 3。但是,在下面运行此代码不会返回值 3,而是返回未定义。

init = function() {
   var var1 = Singleton.myVar;
   console.log(var1); // Returns undefined
   var1 = 3;
   console.log(var1);; // Returns 3
   var var2 = Singleton.myVar;
   console.log(var2); // Returns undefined
}

单例类:

 var Singleton = (function(){
        var instantiated;
        function init (){
            // all singleton code goes here
            return {
                myVar: 3,
                publicWhatever:function(){
                    alert('whatever')
                },
                publicProperty:2
            }
        }

        return {
            getInstance :function(){
                if (!instantiated){
                    instantiated = init();
                }
                return instantiated; 
            }
        }
    })()
4

3 回答 3

2

为什么你的单例声明完全是一个函数?为什么不直接声明对象,如下所示:

var Singleton = {
    myVar: 3,
    publicWhatever:function(){
      alert('whatever')
    },
    publicProperty:2
};
于 2013-03-25T09:53:54.597 回答
2

您需要使用该getInstance函数来获取您的单例实例:

 var var1 = Singleton.getInstance().myVar;

请注意,您的工厂似乎过于复杂。我明白使用IIFE 的意义(你可以定义额外的私有字段或函数),但你可以使用 IIFE 并将你的单例工厂减少到

var Singleton = (function(){
  return {
    myVar: 3,
    publicWhatever:function(){
      alert('whatever')
    },
    publicProperty:2
  }
})();
于 2013-03-25T09:48:58.323 回答
1

为什么不这样做:

var Singleton = function() {

    return {
       ...
       myVar: 3,
       ...
    }

})();

而不是在单例内部有另一层?

于 2013-03-25T09:50:07.080 回答