node.js中addListener(event,listener)和on(event,listener)方法有什么区别?

Rah*_*mar 52 node.js

在这里我无法理解这两种方法之间的基本区别.

var events = require('events');
var eventEmitter = new events.EventEmitter();



var listner1 = function listner1() {
    console.log('listner1 executed.');
}

var listner2 = function listner2() {
    console.log('listner2 executed.');    
}

eventEmitter.addListener('connection', listner1);

eventEmitter.on('connection', listner2);

eventEmitter.emit('connection');
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 70

.on().addListener()与EventEmitter对象完全相同.

直接来自EventEmitter源代码:

EventEmitter.prototype.on = EventEmitter.prototype.addListener;
Run Code Online (Sandbox Code Playgroud)

通过GitHub存储库进行调查,从2010年7月3日开始,这个签名包含评论:"实验:'on'作为'addListener'的别名".


2017年更新:现在的文档说明了EventEmitter.prototype.addListener()这一点:

别名emitter.on(eventName, listener).

  • @RahulKumar - 我发现添加了`.on()`的确切签到以及相应的签到注释 - 添加到我上面的答案中.我唯一感到惊讶的是`.off()`不是`removeListener()`的别名. (5认同)
  • 那为什么要使用两种不同的方法呢?它背后必定有一些逻辑. (3认同)
  • @RahulKumar - 我在这里猜测,但我猜想`.addListener()`很可能是原始的,而`.on()`被添加为一个快捷方式(类似于jQuery) - 只是更少的输入和一些人更喜欢. (3认同)
  • @RahulKumar - 它证明了两种方法具有完全相同的功能实现.他们字面上称为完全相同的代码.这意味着`.on()`包含与.addListener()`完全相同的函数引用,因此每个函数都调用完全相同的代码.它确实证明它们是相同的.另外,我向你指出一个签名注释,解释`.on()`只是`.addListener()`的别名.我不确定你能提供什么其他证据.您可以在调试器中单步执行`.on()`并观察它只是调用`.addListener()`实现,我想. (3认同)