回调函数中的参数来自哪里? Node.js

问题描述:

例如,chat是一个EventEmitter。回调函数可以接受一个名为message的参数。我的问题是message从哪里来?事件message提供了吗?如果是这样,请你们给我一个事件样本message,让我看看它是什么时候触发的,参数是如何提供给chat EventEmitter的?非常感谢你们。回调函数中的参数来自哪里? Node.js

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

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