我认为最简单的方法是声明一个简单的对象文字:
var myInstance = {
method1: function () {
// ...
},
method2: function () {
// ...
}
};
如果你想在你的singleton实例上拥有私有成员,你可以这样做:
var myInstance = (function() {
var privateVar = '';
function privateMethod () {
// ...
}
return { // public interface
publicMethod1: function () {
// All private members are accessible here
},
publicMethod2: function () {
}
};
})();
这被称为the 100,它基本上允许您通过利用closures的使用将私有成员封装在对象上.
如果您想要防止修改Singleton对象,您可以使用ES5 Object.freeze
方法进行freeze it.
这将使对象不可变,防止对其 struct 和值进行任何修改.
如果您使用的是ES6,那么可以很容易地用ES Modules表示一个单例,甚至可以通过在module scope处声明变量来保持private state:
// my-singleton.js
const somePrivateState = []
function privateFn () {
// ...
}
export default {
method1() {
// ...
},
method2() {
// ...
}
}
然后,只需导入singleton对象即可使用它:
import myInstance from './my-singleton.js'
// ...