Javascript单例类默认值
问题描述:
如何在单例类中设置默认值。我在我的类中有这个字典,其中变量名“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;
}
}
})()
答
您需要使用getInstance
功能,让您的单一实例:
var var1 = Singleton.getInstance().myVar;
请注意,你的工厂似乎过于复杂。我看到这一点,使用an IIFE(你可以定义更多的私人领域或功能),但你可以使用一个IIFE和你的单身厂减少到
var Singleton = (function(){
return {
myVar: 3,
publicWhatever:function(){
alert('whatever')
},
publicProperty:2
}
})();
答
为什么不只是做:
var Singleton = function() {
return {
...
myVar: 3,
...
}
})();
而不是在单身人士内部有另一层?
答
为什么你的单例声明是一个函数呢?为什么不直接声明对象,如下所示:
var Singleton = {
myVar: 3,
publicWhatever:function(){
alert('whatever')
},
publicProperty:2
};