Javascript nodejs事件-EventEmitter-了解类实例

Javascript nodejs事件-EventEmitter-了解类实例,javascript,node.js,class,eventemitter,Javascript,Node.js,Class,Eventemitter,我正在实例化一个事件发射器,并注意到这两条线似乎都工作正常 有人能澄清这两种导入和实例化EventEmitter类的方法之间的权衡或区别吗 1:var eventEmitter=new(require('events')).eventEmitter() 2:var eventEmitter=new(require('events').eventEmitter)() 我的目标: 在1中,(require('events'))应返回事件模块的导出。然后.EventEmitter()引用该类并new创

我正在实例化一个事件发射器,并注意到这两条线似乎都工作正常

有人能澄清这两种导入和实例化EventEmitter类的方法之间的权衡或区别吗

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

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

我的目标:

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


在2中,
(require('events').EventEmitter)应返回导出的EventEmitter类。然后
new…()
创建一个新的
EventEmitter`.

没有什么不寻常的。你可以在一个函数周围加上任意多的括号,然后在它后面加上
()
,这样它就可以正常工作了

类似于

(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)();

将引发错误。

假设您使用的是node的最新LTS或0.12之后的版本,则“.EventEmitter”部分已被弃用,而不是必需的。所以您可以这样做:var evntEmitter=new(require('events'))();