有什么区别:
var events = require('events'),
emitter = new events.EventEmitter();
和
var emitter = require('events').EventEmitter;
或 EventEmitter
在使用/不使用 new
和 ()
方面相当宽容?
最佳答案
您的第二个示例根本没有调用 EventEmitter
。 emitter
最终成为对该函数的引用,而不是通过调用它创建的对象。
如果您打算在上面添加 ()
:
var events = require('events'),
emitter = new events.EventEmitter();
对比
var emitter = require('events').EventEmitter();
// Note ------------------------------------^^
那么有两个区别:
您有一个引用事件模块的
events
对象。您在调用
EventEmitter
时没有使用new
。
如果生成的 emitter
是相同的,那么是的,这意味着 EventEmitter
有意使 new
可选。我 don't see that in the docs ,所以我不知道我会依赖它。
...or
EventEmitter
is pretty forgiving in using/not usingnew
and()
?
最后一部分表明您使用了第三种选择:
var emitter = new require('events').EventEmitter;
// `new` -----^ but no () --------------------^
()
是可选的,EventEmitter
不会做任何事情;是 JavaScript new
运算符在做这件事:如果您没有要传递给构造函数的参数,则 ()
在 new
中是可选的表达。 new
总是 调用您给它的函数,无论是否有 ()
。
关于javascript - 将 `new` 和 `()` 与 require 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26156536/