2013-03-25 58 views
3

是什么下面的区别:EventEmitter创作

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

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

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

为什么?

回答

3

注意这些线之间的区别:

new foo().bar()

......还有......

new foo.bar()

在第一种情况下new人员进行更换foo()功能是如何处理:它将用作构造函数(用this指向其原型副本等)

但在第二种情况下,new运算符不能应用于foo,因为后者不是未调用:它的bar属性被调用。当然,new这里意味着foo.bar被用作构造函数。

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

+0

new(require('events'))。EventEmitter();将工作 – user568109 2013-03-25 18:45:56