Javascript单例类默认值
如何在singleton类中设置默认值。我的类中有一个字典,其中变量名myVar的值为3。但是,运行下面的代码不会返回值3,而是返回undefinedJavascript单例类默认值,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;
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
};