message
參數來自觸發事件的任何事件。
您可以從EventEmitter
的source看到on
是addListener
的代名詞:
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"
。
很清楚!感謝您的回覆! – SmartFingers