nodejs events - EventEmitter - 理解类实例

时间:2016-06-22 17:46:34

标签: javascript node.js class eventemitter

我正在实例化一个事件发射器,并注意到这两行看起来都运行正常。

有人可以澄清导入和实例化EventEmitter类的这两种方式之间的权衡或差异吗?

1:var eventEmitter = new (require('events')).EventEmitter();

2:var eventEmitter = new (require('events').EventEmitter)();

我的观点:

在1中,(require('events'))应该返回events模块的导出。然后.EventEmitter()引用该类,new创建EventEmitter的新实例。

2,(require('events').EventEmitter) should return the exported EventEmitter class. Then新...()creates a new instance of EventEmitter`。

1 个答案:

答案 0 :(得分:1)

这没什么不寻常的。您可以在函数周围添加任意数量的括号,然后在()之后添加它,它就可以正常工作。

类似
(1 + 2) === 3;
((1) + 2) === 3;
((1 + (2))) === (3);

等......这同样适用于对象/功能。

class MyClass { /* ... */ }

const object = {
    c: MyClass,
};
let a = new object.c();

console.log(a === new (object).c());
console.log(a === new ((object.c))());
console.log(a === new ((object).c)());

等...

值得注意的是,您不能在点.之后放置括号,例如:

let a = new object.(c)();

会抛出错误。