回调函数中的参数来自哪里? Node.js
问题描述:
例如,chat
是一个EventEmitter。回调函数可以接受一个名为message
的参数。我的问题是message
从哪里来?事件message
提供了吗?如果是这样,请你们给我一个事件样本message
,让我看看它是什么时候触发的,参数是如何提供给chat
EventEmitter的?非常感谢你们。回调函数中的参数来自哪里? Node.js
chat.on('message',function(message){
console.log(message);
});
答
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