例如,chat
是一个 EventEmitter。回调函数可以接受一个名为message
的参数。我的问题是 message
来自哪里?事件 message
是否提供了它?如果是这样,你们能否给我一个事件 message
的示例,让我看看它何时被触发,参数是如何提供给 chat
EventEmitter 的?非常感谢你们。
chat.on('message',function(message){
console.log(message);
});
最佳答案
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"
的方式。
关于javascript - 回调函数中的参数从哪里来? Node .js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35005133/