javascript - 使用 module.export 和 require 的 JavaScript 单例?

标签 javascript design-patterns singleton

我正在尝试在我使用 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/

相关文章:

javascript - 如何在 AJAX 调用中选择时用新值替换初始 PHP 变量?

javascript - 按后退按钮后转到其他页面时滚动位置不会重置

JavaScript 设计模式与 Meteor

Iphone实用程序应用程序单例问题

c++ - static unique_ptr 两次调用析构函数

c++ - 对 Singleton::Singleton() 的 undefined reference

javascript - 未捕获错误 : INDEX_SIZE_ERR: DOM Exception 1, getImageData

javascript - TypeScript 创建通用回调类型

javascript - JavaScript 中的设计模式有用吗?它们到底是什么?

c++ - C++类中的工厂依赖