在 JavaScript中实现单例模式的最简单/最干净的方法是什么?
我认为最简单的方法是声明一个简单的对象文字:
var myInstance = { method1: function () { // ... }, method2: function () { // ... } };
如果你想要你的单例实例上的私有成员,你可以这样做:
var myInstance = (function() { var privateVar = ''; function privateMethod () { // ... } return { // public interface publicMethod1: function () { // All private members are accessible here }, publicMethod2: function () { } }; })();
这被称为 模块 模式,它基本上允许您通过使用闭包将私有成员封装在对象上。
如果你想阻止修改单例对象,你可以 冻结它 ,使用 ES5Object.freeze方法。
Object.freeze
这将使对象不可变,防止对其结构和值进行任何修改。
如果你使用 ES6,你可以很容易地使用 ES 模块 来表示一个单例,你甚至可以通过在 模块范围内 声明变量来保持 私有状态 : __
// my-singleton.js const somePrivateState = [] function privateFn () { // ... } export default { method1() { // ... }, method2() { // ... } }
然后你可以简单地导入单例对象来使用它:
import myInstance from './my-singleton.js' // ...