2013-03-25 60 views
1

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

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

回答

2

您需要使用getInstance功能,让您的单一实例:

var var1 = Singleton.getInstance().myVar; 

请注意,你的工厂似乎过于复杂。我看到这一点,使用an IIFE(你可以定义更多的私人领域或功能),但你可以使用一个IIFE和你的单身厂减少到

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

为什么不只是做:

var Singleton = function() { 

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

})(); 

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

2

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

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