将“new”和“()”与require一起使用



之间有什么区别

var events  = require('events'),
    emitter = new events.EventEmitter();

var emitter = require('events').EventEmitter;

或者CCD_ 1在使用/不使用CCD_ 2和CCD_?

您的第二个示例根本不调用EventEmitteremitter最终是对函数的引用,而不是通过调用它创建的对象

如果你想在上面放()

var events  = require('events'),
    emitter = new events.EventEmitter();

var emitter = require('events').EventEmitter();
// Note ------------------------------------^^

然后有两个区别:

  1. 您有一个引用事件模块的events对象。

  2. 您在呼叫EventEmitter时未使用new

如果得到的EventEmitter0相同,那么是的,这意味着EventEmitter有意使new可选。我在文档中没有看到这一点,所以我不知道我会依赖它。


或者EventEmitter在使用/不使用new()方面相当宽容?

最后一部分建议您使用第三个选项:

var emitter = new require('events').EventEmitter;
// `new` -----^   but no () --------------------^

()是可选的,EventEmitter没有什么作用;是JavaScriptnew运算符在执行此操作:如果没有要传递给构造函数的参数,那么()new0表达式中是可选的。new总是调用您赋予它的函数,无论那里是否有()

您可以自己看到差异

var events = require('events'),
    emitter = new events.EventEmitter();
console.log(typeof emitter);
// object

但当你做类似的事情时

var emitter = require('events').EventEmitter;
console.log(typeof emitter);
// function

在第一种情况下,您调用EventEmitter构造函数来获取对象,但在第二种情况中,您只是将emitter作为对EventEmitter函数本身的引用。

new部分而言,它对一个函数对象进行操作。由于没有要传递给EventEmitter的参数,因此括号是可选的。但在其他任何地方,都需要使用(...)来执行该函数。

相关内容

  • 没有找到相关文章

最新更新