我正在尝试在JavaScript中实现Singleton,我使用Node.js module.export和require()
。
我的问题是到目前为止,module.export从类中返回新对象。
如果我这样做,所有类只能从Singleton类而不是require()
中获取它们 - 那么我能保证我只有一个实例吗?
因为如果从Singleton导入所有其他类 - 我应该如何导入Singleton?
在php中,无论你有多少个Singleton实例 - 每个都共享静态属性。因此,如果您将实例设置为静态,那么无论调用哪些文件,所有Singleton都具有相同的内存并执行相同的操作。
但我不知道JavaScript的情况是什么
我还有另一种方法 - 如果我在文件的开头创建let instance
变量并检查它是否为空,如果不是,我创建另一个实例instance = new MyClass()
然后{ {1}}。这会给我同样的结果吗?
例如我目前所做的事情
module.export = instance
我的想法是什么,但不知道它是好的还是会起作用
class MyClass {
//some logic here
}
module.export = new MyClass()
另外,为了使事情变得更复杂,我已经看到了几个版本的实现
此处 - > https://www.sitepoint.com/javascript-design-patterns-singleton/
有3个例子 -
1.旧JS ECMA 2015方式功能
2.ECMA 2016与对象文字而不是类
3.与类同时使用Object.freeze和const
现在......这些版本使用了我不熟悉的Object.freeze和const变量......我也不完全确定它们是如何工作的。
回顾(TL; DR) - 我想要做的是这样一种方式,如果我需要10个带if(!instance){
let instance = 1;
}
class MyClass {
//some logic here
}
if(instance === 1){
instance = new MyClass()
}
module.export = instance
的文件中的一个类,我将不会得到10个实例但只有1个。
我的方式是否正常运行并且是require("MyClass")
链接中的示例以及Object.freeze()
良好工作示例的使用?我是否需要一个正常的Singleton类来完成这项工作?因为到目前为止解决方案不包括一个。如果我需要 - 我如何传递Singleton,因此它只有一个实例?