我看到一些例子,说明如何实现在JavaScript中使用IIFE Singleton设计模式,但我不知道如何使用类来实现呢?
class Ex {
static getInstance() {
if (Ex.instance === null) {
Ex.instance = new Ex();
}
return Ex.instance;
}
}
Ex.instance = null;
const ex = Ex.getInstance();
console.log(ex);
虽然你可以做到这一点,就没有必要使用class
它。大多数时候,你可以只使用一个普通的Object
并把它像一个单身:
export const MySingleton = {
init(...args) { /* */ },
method(...args) { /* do whatever you want */ }
}
然后,例如:
import {MySingleton} from './path/to/mysingleton';
MySingleton.init(1, 2, 3);
MySingleton.method();
如果你想有一个流畅的API,只是在回报this
或MySingleton
对象:
export const MySingleton = {
init(...args) {
/* do some stuff */
return MySingleton;
},
...
}
结果是:
import {MySingleton} from './path/to/mysingleton';
MySingleton.init(1, 2, 3).method();
有在JavaScript没有类:
JavaScript类,在ECMAScript中介绍了2015年,有超过JavaScript的现有的基于原型的继承主要是语法糖。类的语法不引入新的面向对象的继承模型的JavaScript。
问题的关键是这是不可能的,而Singleton模式是基于与私有构造函数和公共访问封装在JavaScript中定义的公共或私有方法。