2013-03-25 44 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 
};