我只是在研究在 JavaScript 中定义单例的方法,在研究了一些示例之后,我想到了以下我在任何地方都没有找到的方法:
function MyClass() {
if (MyClass._sharedInstance === undefined) {
// actual constructor code
MyClass._sharedInstance = this;
}
return MyClass._sharedInstance;
}
MyClass._sharedInstance = undefined;
看起来工作正常...但事实上我在任何地方都找不到这个让我很怀疑。有什么理由不这样做单例,特别是考虑到 JavaScript 的许多小陷阱。我知道通过简单地执行 var MyClass = {/* MyClass Stuff */}
我可以用更少的代码实现单例,但为了保持一致性,我想使用原型(prototype)定义所有类.
最佳答案
提议的解决方案似乎没有“解决”任何问题1;像这样, 我推荐使用惯用的“简单模块模式”的标准变体 IIFE :
MySingleton = (function () {
// This function is only executed once
// and whatever is returned is the singleton.
return {
// Expose members here
};
})();
根据具体需要,还可以返回新的对象,从而使该模式变得灵活,而无需引入单独的“单例”字段和保护,例如
MySingleton = (function () {
// Contrived, but valid - any object returned
// functions as the singleton.
function MyClass {}
return new MyClass();
})();
<小时/>
1如果有的话,它可能会导致一些“WTF?”当 new MyClass()
返回一个共享/单例对象时,这不是“正常”行为。
关于javascript - Javascript 中的单例和原型(prototype)设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174141/