ES6 Class和module.exports

时间:2016-09-16 08:56:52

标签: javascript node.js ecmascript-6

我现在看到这种模式用于nodeJS实现,其中我们的模块有以下代码:

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

然后当我做一个require并最终说新建一个类的实例时。

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

根据我的这个模式,每次调用它时都会继续创建Foo类的多个实例。

另一种模式可能就是我习惯于在我的foo.js中的位置。

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

然后我只需要并致电吧。

var foo = require(./foo);
foo.bar();

这两个问题的行为是否相同?第二种模式是否会在我需要的时候继续创建对象并在对象上调用bar?

在案例1中创建单例模式不是一个好主意,因为我们习惯于使用其他语言,如果已经创建过一次,我们会继续提供相同的实例吗?

1 个答案:

答案 0 :(得分:9)

  

根据我的这个模式,每次调用它时都会继续创建Foo类的多个实例。

是的,这就是目的。虽然require()在您的示例中也只执行一次。

  

这两个表现相同吗?

没有

  

第二种模式是否会在我需要的时候继续创建对象并在对象上调用bar?

没有。缓存class次调用,每次都返回相同的模块。

  

不是创造单身模式是一个好主意吗?

不,如果单身包含任何状态,单身人士很少是个好主意。您的示例没有,但在Node.js中使用{{1}} es通常会这样做。