我正在实例化一个事件发射器,并注意到这两行看起来都运行正常。
有人可以澄清导入和实例化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`。
答案 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)();
会抛出错误。