我的单例设计模式有什么问题?
What is wrong with my singleton design pattern?
var singleton = (function(){
var instance;
function init(){
var privateVariable = 'Private'
var privateMethod = function(){ console.log('Am private');}
return {
publicField : 'Public',
publicMethod : function(){ console.log('Am public');},
randomVar : Math.random()
};
};
return function(){
if(!instance) { instance = init(); }
else { return instance; }
}
})();
var single1 = singleton();
var single2 = singleton();
console.log(single1.randomVar == single2.randomVar);
应该 return true ,returned: TypeError: single1 is undefined,
但是如果我删除了函数周围的 IIFE 环绕,它就可以完美地工作所以我不明白为什么会这样?
我猜你想要这个。总是returninstance
,即使是第一次
return function(){
if(!instance) {
instance = init();
}
return instance;
}
在初始调用中你没有返回任何东西,你只是在初始化它 - 因此 undefined
。在初始化调用之后放置一个 return instance
应该可以解决问题。
您要么想要添加 return
关键字
return function(){
if(!instance) { return instance = init(); }
else { return instance; }
}
或省略 else
:
return function(){
if(!instance) { instance = init(); }
return instance;
}
删除 return 中的其他部分。
return function() {
if (!instance) {
instance = init();
}
return instance;
}
var singleton = (function() {
var instance;
function init() {
var privateVariable = 'Private'
var privateMethod = function() {
console.log('Am private');
}
return {
publicField: 'Public',
publicMethod: function() {
console.log('Am public');
},
randomVar: Math.random()
};
};
return function() {
if (!instance) {
instance = init();
}
return instance;
}
})();
var single1 = singleton();
var single2 = singleton();
console.log(single1.randomVar == single2.randomVar);
var singleton = (function(){
var instance;
function init(){
var privateVariable = 'Private'
var privateMethod = function(){ console.log('Am private');}
return {
publicField : 'Public',
publicMethod : function(){ console.log('Am public');},
randomVar : Math.random()
};
};
return function(){
if(!instance) { instance = init(); }
else { return instance; }
}
})();
var single1 = singleton();
var single2 = singleton();
console.log(single1.randomVar == single2.randomVar);
应该 return true ,returned: TypeError: single1 is undefined, 但是如果我删除了函数周围的 IIFE 环绕,它就可以完美地工作所以我不明白为什么会这样?
我猜你想要这个。总是returninstance
,即使是第一次
return function(){
if(!instance) {
instance = init();
}
return instance;
}
在初始调用中你没有返回任何东西,你只是在初始化它 - 因此 undefined
。在初始化调用之后放置一个 return instance
应该可以解决问题。
您要么想要添加 return
关键字
return function(){
if(!instance) { return instance = init(); }
else { return instance; }
}
或省略 else
:
return function(){
if(!instance) { instance = init(); }
return instance;
}
删除 return 中的其他部分。
return function() {
if (!instance) {
instance = init();
}
return instance;
}
var singleton = (function() {
var instance;
function init() {
var privateVariable = 'Private'
var privateMethod = function() {
console.log('Am private');
}
return {
publicField: 'Public',
publicMethod: function() {
console.log('Am public');
},
randomVar: Math.random()
};
};
return function() {
if (!instance) {
instance = init();
}
return instance;
}
})();
var single1 = singleton();
var single2 = singleton();
console.log(single1.randomVar == single2.randomVar);