在 JavaScript 中实现 单例模式 的最简单/最干净的方法是什么?
原文由 Jakub Arnold 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 JavaScript 中实现 单例模式 的最简单/最干净的方法是什么?
原文由 Jakub Arnold 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为最干净的方法是这样的:
var SingletonFactory = (function(){
function SingletonClass() {
//do stuff
}
var instance;
return {
getInstance: function(){
if (instance == null) {
instance = new SingletonClass();
// Hide the constructor so the returned object can't be new'd...
instance.constructor = null;
}
return instance;
}
};
})();
之后,您可以调用该函数
var test = SingletonFactory.getInstance();
原文由 sebarmeli 发布,翻译遵循 CC BY-SA 4.0 许可协议
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
我认为最简单的方法是声明一个简单的对象文字:
如果你想要你的单例实例上的私有成员,你可以这样做:
这被称为 _模块模式_,它基本上允许您通过使用 闭包 将私有成员封装在对象上。
如果你想阻止修改单例对象,你可以 _冻结它_,使用 ES5
Object.freeze
方法。这将使对象不可变,防止对其结构和值进行任何修改。
如果你使用 ES6,你可以很容易地使用 ES 模块 来表示一个单例,你甚至可以通过在 模块范围内 声明变量来保持 _私有状态_:
然后你可以简单地导入单例对象来使用它: