我正在尝试在我使用 Node.js module.export 和 require()
的 JavaScript 中实现 Singleton。
到目前为止,我的问题是 module.export 从类中返回新对象。
如果我做到这一点,所有类都只需要来自 Singleton 类而不是 require()
- 那么我能保证我只有一个实例吗?
因为如果所有其他类都从 Singleton 导入 - 我应该如何导入 Singleton?
在 php 中,无论您有多少个 Singleton 实例 - 每个实例都共享静态属性。因此,如果您将实例设为静态,则所有单例实例无论在哪个文件中被调用都具有相同的内存并执行相同的操作。
但是我不知道 JavaScript 是怎么回事
我还有另一种方法 - 如果我在文件的开头创建 let instance
变量并检查其末尾是否为空,如果不是,我创建另一个实例 instance = new MyClass()
然后是 module.export = instance
。这会给我相同的结果吗?
比如我现在做的
class MyClass {
//some logic here
}
module.export = new MyClass()
想做但不知道好不好用
if(!instance){
let instance = 1;
}
class MyClass {
//some logic here
}
if(instance === 1){
instance = new MyClass()
}
module.export = instance
同样让事情变得更复杂的是我看到了几个版本的实现
这里 -> https://www.sitepoint.com/javascript-design-patterns-singleton/
有3个例子-
1.带有函数的旧 JS ECMA 2015 方式
2.ECMA 2016 用对象字面量代替类
3.有类但又是 Object.freeze 和 const
现在..这些版本使用了我不熟悉的 Object.freeze 和 const 变量......我也不太确定它们是如何工作的。
回顾一下(长话短说;博士)——我想做的是一种方法,这样如果我在 10 个文件中使用 require("MyClass")
需要一个类,我将不会得到 10 个实例但只有 1 个。
我的方法是否正常工作?Object.freeze()
链接中的示例和使用 const
的示例是否良好?我需要一个实际的 Singleton 吗?类做作业?因为到目前为止的解决方案不包括一个。如果我需要 - 我如何传递那个 Singleton 以便它只有一个实例?
最佳答案
Node.js modules are singletons by default.
引用同一个文件的所有导入将引用内存中的同一个对象。你不需要做任何特别的事情
关于javascript - 使用 module.export 和 require 的 JavaScript 单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48762894/