从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/

10-13 01:00