2016-01-26 69 views
3

例如,chat是一個EventEmitter。回調函數可以接受一個名爲message的參數。我的問題是message從哪裏來?事件message提供了嗎?如果是這樣,請你們給我一個事件樣本message,讓我看看它是什麼時候觸發的,參數是如何提供給chat EventEmitter的?非常感謝你們。回調函數中的參數來自哪裏? Node.js

chat.on('message',function(message){ 
    console.log(message); 
}); 

回答

1

message參數來自觸發事件的任何事件。

您可以從EventEmittersource看到onaddListener的代名詞:

EventEmitter.prototype.on = EventEmitter.prototype.addListener; 

然後你就可以看到,addListener只是把處理程序所提供的類型的所有處理程序的列表(簡化代碼):

EventEmitter.prototype.addListener = function(type, listener) { 
    // ... 
    if (!this._events) this._events = {}; 
    // ... 
    this._events[type] = this._events[type] || []; 
    this._events[type].push(listener); 
    // ... 
    return this; 
}; 

然後emit調用相應的列表中的每個處理程序:

EventEmitter.prototype.emit = function(type) { 
    // ... 
    var args = Array.prototype.slice.call(arguments, 1); 

    var listeners = this._events[type]; 
    for (var i = 0, l = listeners.length; i < l; i++) { 
    listeners[i].apply(this, args); 
    } 
    return true; 
    // ... 

};

所以,當你說.emit('message', "Hello")args["Hello"],並listeners[i].apply(this, args)將發送的參數function(message) { /* ... */ }您在.on調用所定義這個列表:這是怎麼了message變得"Hello"

+0

很清楚!感謝您的回覆! – SmartFingers