gpt4 book ai didi

javascript - javascript中单例的正确实现

转载 作者:行者123 更新时间:2023-12-03 09:36:38 26 4
gpt4 key购买 nike

我在 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){实例 = createInstance()}相当我们应该立即调用函数,在该函数中创建一个对象,该对象将是私有(private)对象,然后通过 getInstance 方法返回它。

我的问题是:我的理解正确吗?还是我遗漏了一些要点,因此在 javascript 中实现单数是错误的。

非常感谢

最佳答案

这样做的原因

return {
getInstance: function () {
if (!instance){
instance = createInstance();
}
return instance;
}
};

在第一次调用 getInstance 之前,不会创建实例...因此单例可能永远不会被实例化(如果这样做“成本高昂”,则很好)

关于javascript - javascript中单例的正确实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31316044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com