2012-05-24 37 views
0

我只是好奇,想知道是什麼目的,節點JS:請求的代碼片段解釋

function MyStream() { 
    events.EventEmitter.call(this); 
} 
在從Nodejs.org文檔部分採取以下代碼塊

var util = require("util"); 
var events = require("events"); 

function MyStream() { 
    events.EventEmitter.call(this); 
} 

util.inherits(MyStream, events.EventEmitter); 

MyStream.prototype.write = function(data) { 
    this.emit("data", data); 
} 

var stream = new MyStream(); 

console.log(stream instanceof events.EventEmitter); // true 
console.log(MyStream.super_ === events.EventEmitter); // true 

stream.on("data", function(data) { 
    console.log('Received data: "' + data + '"'); 
}) 
stream.write("It works!"); // Received data: "It works!" 

請解釋。

回答

1

這是不是第一次這個問題已經被問:https://groups.google.com/forum/#!topic/nodejs/ab_Xih1L5R8/discussion

布拉德利報價梅克:

的物體上使用EventEmitter.call會做的實例方法的設置/屬性(不繼承)一個EventEmitter。它與Java中的super(...)或C#中的base(...)的目的類似,但它在Javascript中並不隱含。因此,我們必須自己手動調用它。至於關於util.inherits的討論,這將使MyStream函數繼承另一個原型函數,以便instanceof工作(注意:javascript只允許單一繼承)。由於新運算符的工作方式,如果我們將此變量設置爲EventEmitter的一個實例,並調用EventEmitter.call,它會查找所有意圖和用途,就好像在我們的MyStream對象上調用EventEmitter的構造函數一樣。

+0

看起來像一個常見的問題。非常感謝您的時間。 – Futur

+0

沒問題。您可以將答案標記爲已接受,所以此問題不會顯示爲「未答覆」。 – alessioalex

+0

當然....完成:) – Futur