【发布时间】:2021-01-15 01:32:07
【问题描述】:
我了解到我们应该避免使用 Singleton。我想知道如果我以这种方式开发一个模块,我是在做一个单例吗?
class MyClass{
}
export default new MyClass();
因为每次我加载模块我都会得到相同的实例,不是吗?
谢谢
【问题讨论】:
-
你的
MyClass实际上是做什么的?如果它确实保持状态,是的,你应该避免只导出一个实例。如果它不保持状态,则不应使用class。 -
感谢您的链接。我只是想弄清楚为什么我在导入第三方模块时从未看到“新”。它们似乎都是单例,但如果应该避免它们如何构建它们?例如 Axios、Express、Lodash。您永远不会导入 lib,而不是“new Axios()”或“new Express()”。为什么?
-
Axios 没有全局状态 afaik,它只是导出一个函数。 express 实际上确实导出了一个“构造函数”,你可以在其中
const app = new Express(),尽管这个构造函数也是一个单例实例,因为 express 通常用作具有一个全局实例的框架(和一个全局 http 服务器侦听到单个端口),他们希望简化这种用法。并不是说这是一个好习惯,但在某些用例中,这正是您所需要的。 -
我正在研究 Axios 源代码,我认为 Axios 返回其类的实例。 github.com/axios/axios/blob/master/lib/axios.js 它导出了
createInstance()函数的返回,该函数确实会返回一个新的 Axios 实例。所以和我正在做的没有什么不同。这还很糟糕吗?
标签: javascript typescript singleton es6-modules