ES6类和module.exports

9

最近我看到 Node.js 实现中出现了这种模式,其中我们有以下代码:

class Foo {
  bar() {
    console.log('bar');
  }
}
module.exports = Foo;

当我执行 require 并最终使用 new 创建一个类的实例时。

var Foo = require(./foo);
var myFoo = new Foo();
myFoo.bar();

在我的看法中,这种模式每次被调用时都会创建多个类Foo的实例。

另一种模式可能是我习惯的,在我的foo.js文件中:

module.exports = {
  bar: function() {
    console.log('bar');
  }
};

然后我只需要require并调用bar。
var foo = require(./foo);
foo.bar();

这两个代码片段的行为是否相同?第二个代码每次调用 bar 方法时都会创建对象吗?

在这种情况下,创建单例模式是一个好主意吗?就像其他语言中那样,如果已经创建了实例,我们保持使用同一个实例。


你正在使用ES6,所以请确保很少的浏览器支持此功能。 - arjun kori
意图是在nodeJS中运行,而不是在浏览器中。 - Sourav Chatterjee
1个回答

10

在我看来,这种模式每次调用都会创建类Foo的多个实例。

是的,这就是目的。虽然在你的例子中只执行了一次new Foo();

这两个模式行为相同吗?

不相同。

第二种模式会在每次需要并调用对象上的bar时创建对象吗?

不会。require()调用会被缓存,每次返回相同的模块。

创建单例模式不是一个好主意吗?

如果单例包含任何状态,那么很少是一个好主意。你的例子没有,但是当classes在Node.js中使用时,它们通常会包含状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接