Nodejs EventEmitter.once()如何工作?
从nodejs 源代码(LOC 179) ,我们有以下几点:
EventEmitter.prototype.once = function(type, listener) { /** ... **/ function g() { /** ... **/ } g.listener = listener; // => ??? this.on(type, g); return this; };
到目前为止,我的想法是这样的:
EventEmitter.once()
设置一个type
的事件,并通过g()
调用callbacklistener
立即将其删除。 但是,真正的行g.listener = listener;
做?
它是否添加了一个属性listener
,它是调用时由构造函数g()
创build的函数对象的函数?
它被设置,以便您稍后可以调用removeListener
。
如果您调用this.once(event, listener)
,稍后调用this.removeListener(listener)
,代码将无法在列表中findlistener
,因为它被封装在g
。
这就是为什么在L214的testing确实如此:
if (list === listener || (util.isFunction(list.listener) && list.listener === listener)) {