我认为最简单的方法是声明一个简单的对象文字:
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 () {
}
};
})();
这被称为the 模块模式,它基本上允许您通过利用closures.
如果想防止单例对象被修改,可以冻结它,使用ES5Object.freeze method.
这将使对象不可变,从而防止对其结构和值进行任何修改。
如果您使用 ES6,您可以使用以下方式表示单例ES模块非常容易,你甚至可以握住私人国家通过声明变量模块范围:
// my-singleton.js
const somePrivateState = []
function privateFn () {
// ...
}
export default {
method1() {
// ...
},
method2() {
// ...
}
}
然后你可以简单地导入单例对象来使用它:
import myInstance from './my-singleton.js'
// ...