2013-03-25 63 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