使用`new`和`()`with require [英] using `new` and `()` with require
问题描述
有什么区别
var events = require('events'),
emitter = new events.EventEmitter();
和
var emitter = require('events').EventEmitter;
或 EventEmitter
在使用/时非常宽容不使用新
和()
?
or EventEmitter
is pretty forgiving in using/not using new
and ()
?
推荐答案
你的第二个例子根本没有调用 EventEmitter
。 emitter
最终成为对函数的引用,而不是通过调用它创建的对象。
Your second example doesn't call EventEmitter
at all. emitter
ends up being a reference to the function, not an object created by calling it.
如果你想要拥有()
:
var events = require('events'),
emitter = new events.EventEmitter();
vs
var emitter = require('events').EventEmitter();
// Note ------------------------------------^^
然后有两点不同:
-
你有一个
events
对象引用事件模块。
你没有'调用 EventEmitter
时,请使用 new
。
You didn't use new
when calling EventEmitter
.
如果结果发射器
相同,那么是的,这意味着 EventEmitter
故意使 new
可选。我在文档中看不到,所以我不知道我d依赖它。
If the resulting emitter
is identical, then yes, it means that EventEmitter
intentionally makes new
optional. I don't see that in the docs, so I don't know that I'd rely on it.
...或
EventEmitter
在使用/不使用new
和()
时非常宽容?
...or
EventEmitter
is pretty forgiving in using/not usingnew
and()
?
最后一部分表明你使用了第三种选择:
The last part of that suggests you've used a third option:
var emitter = new require('events').EventEmitter;
// `new` -----^ but no () --------------------^
拥有()
可选不存在 EventEmitter
确实;这是执行它的JavaScript new
运算符:如果没有参数传递给构造函数,()
在 new
表达式中是可选的。 new
总是调用你给它的函数,无论是否有()
。
Having ()
optional there isn't something EventEmitter
does; it's the JavaScript new
operator that's doing it: If you have no arguments to pass to the constructor function, the ()
are optional in a new
expression. new
always calls the function you give it, whether there are ()
there or not.
这篇关于使用`new`和`()`with require的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!