Javascript单例类默认值

Javascript单例类默认值,javascript,singleton,Javascript,Singleton,如何在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;

如何在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
}
单身人士类别:

 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; 
            }
        }
    })()
您需要使用getInstance函数来获取单例实例:

 var var1 = Singleton.getInstance().myVar;
请注意,您的工厂似乎过于复杂。我明白使用它的意义,你可以定义额外的私有字段或函数,但你可以使用IIFE并将你的单例工厂简化为

var Singleton = (function(){
  return {
    myVar: 3,
    publicWhatever:function(){
      alert('whatever')
    },
    publicProperty:2
  }
})();
您需要使用getInstance函数来获取单例实例:

 var var1 = Singleton.getInstance().myVar;
请注意,您的工厂似乎过于复杂。我明白使用它的意义,你可以定义额外的私有字段或函数,但你可以使用IIFE并将你的单例工厂简化为

var Singleton = (function(){
  return {
    myVar: 3,
    publicWhatever:function(){
      alert('whatever')
    },
    publicProperty:2
  }
})();
为什么不干脆做:

var Singleton = function() {

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

})();
与其在singleton中有另一层,为什么不:

var Singleton = function() {

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

})();

而不是在单例中有另一层?

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

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

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

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