Javascript 在require中使用'new'和'()'

Javascript 在require中使用'new'和'()',javascript,node.js,javascript-events,event-handling,ecmascript-6,Javascript,Node.js,Javascript Events,Event Handling,Ecmascript 6,两者的区别是什么 var events = require('events'), emitter = new events.EventEmitter(); 及 或者EventEmitter在使用/不使用new和?时非常宽容,您的第二个示例根本不调用EventEmitter。发射器最终是对函数的引用,而不是通过调用它创建的对象 如果你想在这方面有所成就: vs 那么有两个区别: 您有一个引用事件模块的事件对象 调用EventEmitter时未使用new 如果生成的发射器相同,则为“是”

两者的区别是什么

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


或者EventEmitter在使用/不使用new和?

时非常宽容,您的第二个示例根本不调用EventEmitter。发射器最终是对函数的引用,而不是通过调用它创建的对象

如果你想在这方面有所成就:

vs

那么有两个区别:

您有一个引用事件模块的事件对象

调用EventEmitter时未使用new

如果生成的发射器相同,则为“是”,这意味着EventEmitter故意将new设置为可选。我,所以我不知道我会依赖它

…或者EventEmitter在使用/不使用new and时非常宽容

最后一部分建议您使用第三种选择:

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

拥有可选的EventEmitter功能,但没有EventEmitter功能;是JavaScript新操作符在做这件事:如果没有参数要传递给构造函数,则新表达式中的参数是可选的。new始终调用您赋予它的函数,无论是否存在。

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

如果你想在这方面有所成就:

vs

那么有两个区别:

您有一个引用事件模块的事件对象

调用EventEmitter时未使用new

如果生成的发射器相同,则为“是”,这意味着EventEmitter故意将new设置为可选。我,所以我不知道我会依赖它

…或者EventEmitter在使用/不使用new and时非常宽容

最后一部分建议您使用第三种选择:

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

拥有可选的EventEmitter功能,但没有EventEmitter功能;是JavaScript新操作符在做这件事:如果没有参数要传递给构造函数,则新表达式中的参数是可选的。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函数本身的引用


就新部件而言,它对函数对象进行操作。由于没有要传递给EventEmitter的参数,因此括号是可选的。但在其他地方,你需要使用。。。执行该函数。

您可以自己看到差异

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函数本身的引用

就新部件而言,它对函数对象进行操作。由于没有要传递给EventEmitter的参数,因此括号是可选的。但在其他地方,你需要使用。。。执行该功能。

相关:相关: