Параметр message
исходит из того, что вызвало событие.
Вы можете видеть из source из EventEmitter
, что 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