从nodejs source code (LOC 179)中,我们有以下内容:
EventEmitter.prototype.once = function(type, listener) {
/** ... **/
function g() { /** ... **/ }
g.listener = listener; // => ???
this.on(type, g);
return this;
};
到目前为止,我的想法是这样的:
EventEmitter.once()
设置type
事件,并通过listener
调用了回调g()
后立即将其删除。但是g.listener = listener;
这行实际上是做什么的?是否在调用时向构造函数
listener
创建的功能对象添加属性g()
,该功能是一个函数? 最佳答案
进行了设置,以便以后可以调用removeListener
。
如果您调用this.once(event, listener)
,然后再调用this.removeListener(listener)
,则该代码将在列表中找不到listener
,因为它包装在g
中。
这就是在L214上进行测试的原因:
if (list === listener ||
(util.isFunction(list.listener) && list.listener === listener)) {
关于javascript - Nodejs EventEmitter.once()如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20881224/