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

node.js中的addListener(event,listener)和on(event,listener)方法有什么区别?,node.js,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 execu

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

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');
.on()
与EventEmitter对象中的
.addListener()
完全相同

直截了当地说:

通过搜索GitHub存储库,从2010年7月3日开始,有一个包含注释:“实验性:'on'作为'addListener'的别名”


2017年更新:现在说:

发射器的别名(eventName,listener)


它们的功能完全相同,但是,它们可以以不同的方式使用,以提高代码的效率。假设您创建了一个服务器,并通过使用“.addListener(event,listener)”,为连接到服务器的每个用户创建了一个侦听器。现在,一旦用户断开连接,就可以使用命令“RemovelListener”删除该侦听器,但不能删除“.on(event,listener)”命令。因此,您可以在不同的情况下使用这两个命令

是的,您可以将“RemovelListener”与使用“on”创建的侦听器一起使用。试试看

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

// listener #1
var listner1 = function listner1() {
   console.log('listner1 executed.');
}

// listener #2
var listner2 = function listner2() {
  console.log('listner2 executed.');
}

// Bind the connection event with the listner1 function
eventEmitter.addListener('connection', listner1);

// Bind the connection event with the listner2 function
eventEmitter.on('connection', listner2);

var eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

// Fire the connection event 
eventEmitter.emit('connection');

// Remove the binding of listner1 function
eventEmitter.removeListener('connection', listner2);
console.log("Listner2 will not listen now.");

// Fire the connection event 
eventEmitter.emit('connection');

eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");

console.log("Program Ended.");
新增版本:v10.0.0

emitter.off(eventName, listener)

发射器的别名。removeListener()

那么为什么要使用两种不同的方法呢?它背后一定有某种逻辑。@RahulKumar-我在这里猜,但我猜
.addListener()
很可能是原始的,
.on()
是作为快捷方式添加的(类似于jQuery)-只是键入较少,而且是一些人的首选。@RahulKumar-我找到了添加
.on()的确切签入
和相应的签入注释-添加到我的上述答案中。唯一令我惊讶的是,
.off()
不是
removeListener()
@RahulKumar的别名-这证明了这两种方法具有完全相同的函数实现。他们实际上调用了完全相同的代码。这意味着
.on()
包含与
.addListener()
完全相同的函数引用,因此每个函数调用完全相同的代码段。它确实证明了它们是相同的。另外,我还向您指出了一条签入注释,该注释解释了
.on()
只是
.addListener()
的别名。我不知道还能给你什么证据。您可以在调试器中单步执行
.on()
,只需调用
.addListener()
实现,我想。@BangOperator-好吧,jQuery多年来一直将
.on()
作为添加事件侦听器和删除此类侦听器的一种方法。这就是这个想法的来源。而且,如果要创建一个很好的快捷方式
.on()
来替换
.addListener()
,那么也可以为
.removeListener()
创建一个快捷方式。on(event,listener)的可能重复项会将一个侦听器添加到指定事件的侦听器数组的末尾。不检查是否已添加侦听器。传递相同事件和侦听器组合的多个调用将导致多次添加侦听器。返回发射器,因此可以链接调用。这是错误的,使用
removeListener
可以删除添加了
on
的事件,与使用
addListener
添加的事件完全相同,
on
只是键入
addListener
addListener的更快方法,在这种情况下更全面。将add-negated改为remove,这样在这个上下文中保持一致是有意义的。
emitter.off(eventName, listener)