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