我在javascript中遇到了单例设计模式的实现。
var Singleton = (function () {
var instance;
function createInstance() {
var object = new Object("I am the instance");
return object;
}
return {
getInstance: function () {
if (!instance){
instance = createInstance();
}
return instance;
}
};
})();
接近两个
var singleton = (function(){
var a = { value: "string"};
return {
getInstance: function(){
return a;
}
};
})();
var ob = singleton.getInstance();
var be = singleton.getInstance();
console.log(ob===be); //logs true
所以我的问题是第二种方法是否存在任何问题。
我认为没有必要创建一个函数并让它返回一个对象,而是我们可以简单地创建一个对象并通过getInstance()方法返回它,因为它是IIFE(立即调用函数),所以只有正在创建的对象的一个实例,所以我们任何方式都不需要进行以下检查 if(!instance){instance = createInstance()} 宁 我们应该立即调用函数,在该函数中创建一个对象,它将是私有对象,然后通过getInstance方法返回它。
我的问题是:我的理解是正确的还是我错过了一些观点,因此我在javascript中实现了单数错误。
非常感谢
答案 0 :(得分:1)
这样做的原因
return {
getInstance: function () {
if (!instance){
instance = createInstance();
}
return instance;
}
};
在第一次调用getInstance之前不会创建实例...所以单例可能永远不会被实例化(如果这样做“很贵”,那就好了)
答案 1 :(得分:0)
是第二种方法是正确的。第二种方法没有问题。
人们通过从java扩展它来解释使用第一种方法,java是基于类的语言,我们需要在使用之前实例化对象,
但是在javascript中我们可以简单地使用Object文字创建一个对象,例如它将是单例对象: var a = {}; 这里是一个单例对象,不能有另一个创建的实例,就像一个。
如果我们希望我们的单例对象具有私有变量和私有方法,我们可以通过问题中提到的SECOND方法。
请参阅以下链接以获得澄清 Simplest/Cleanest way to implement singleton in JavaScript?