3

以下有什么区别:

new require('events').EventEmitter();

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

第一个不工作,但第二个 - 工作。

为什么?

4

1 回答 1

3

注意这些行之间的区别:

new foo().bar()

... 和 ...

new foo.bar()

在第一种情况下,new运算符将更改foo()函数的处理方式:它将用作构造函数(this指向其原型副本等)

但是在第二种情况下,new运算符不能应用于foo,因为后者没有被调用:而是调用它的bar属性。自然,new这里的手段foo.bar被用作构造函数。

这正是您的示例中发生的情况:第一种情况试图应用于new函数require调用,而不是%require_result%.EventEmitter一个。

于 2013-03-25T12:32:37.333 回答