1

シングルトンクラスにデフォルト値を設定するにはどうすればよいですか。クラスにこの辞書があり、変数名「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
}

シングルトンクラス:

 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

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 に答える
2

シングルトン宣言が関数であるのはなぜですか?次のように、オブジェクトを直接宣言しないのはなぜですか。

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

なぜそうしないのですか?

var Singleton = function() {

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

})();

シングルトンの中に別のレイヤーを置くのではなく?

于 2013-03-25T09:50:07.080 に答える