Javascript单例类默认值

时间:2013-03-25 09:47:09

标签: javascript singleton

如何在我的单件类中设置默认值。我在我的类中有这个字典,其中变量名称“myVar”被赋值为3.但是,运行下面的代码不会返回值3,而是返回undefined。

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
}

Singleton类:

 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; 
            }
        }
    })()

3 个答案:

答案 0 :(得分:2)

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

 var var1 = Singleton.getInstance().myVar;

请注意,您的工厂似乎过于复杂。我看到使用an IIFE(您可以定义其他私有字段或函数)的重点,但您可以使用IIFE并将单件工厂减少到

var Singleton = (function(){
  return {
    myVar: 3,
    publicWhatever:function(){
      alert('whatever')
    },
    publicProperty:2
  }
})();

答案 1 :(得分:2)

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

var Singleton = {
    myVar: 3,
    publicWhatever:function(){
      alert('whatever')
    },
    publicProperty:2
};

答案 2 :(得分:1)

为什么不这样做:

var Singleton = function() {

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

})();

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