来自 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;
这行到底做了什么?
它是否在构造函数g()
调用时为构造函数对象添加了一个函数对象属性listener
?
请您参考如下方法:
设置它以便您稍后可以调用 removeListener
。
如果你调用this.once(event, listener)
,然后又调用了this.removeListener(listener)
,代码将找不到listener
在列表中,因为它包含在 g
中。
这就是为什么在 L214 进行测试的原因做:
if (list === listener ||
(util.isFunction(list.listener) && list.listener === listener)) {