【发布时间】:2019-02-05 13:34:33
【问题描述】:
我看到了一些如何在 javascript 中使用 IIFE 实现单例设计模式的示例,但我想知道如何使用类来实现它?
【问题讨论】:
标签: javascript design-patterns singleton
我看到了一些如何在 javascript 中使用 IIFE 实现单例设计模式的示例,但我想知道如何使用类来实现它?
【问题讨论】:
标签: javascript design-patterns 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();
如果您想要一个 fluent 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中没有类:
在 ECMAScript 2015 中引入的 JavaScript 类主要是 JavaScript 现有的基于原型的继承的语法糖。类语法不会向 JavaScript 引入新的面向对象的继承模型。
关键是在 JavaScript 中无法定义公共或私有方法,而单例模式是基于私有构造函数和公共访问器的封装。
【讨论】: