使用`new`和`()`with require [英] using `new` and `()` with require

查看:69
本文介绍了使用`new`和`()`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 ------------------------------------^^

然后有两点不同:


  1. 你有一个 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 using new 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆