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

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

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 .addListener()完全相同。

直接从EventEmitter源代码 :

 EventEmitter.prototype.on = EventEmitter.prototype.addListener; 

通过GitHub仓库进行testing,从2010年7月3日开始,包含以下注释: “Experimental:'on'作为'addListener'的别名”


2017年更新: EventEmitter.prototype.addListener()的文档现在说这个:

emitter.on(eventName, listener)别名。

是的,你可以使用“removeListener”和一个用“on”创build的监听器。 尝试一下。

 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."); 

他们的function是完全一样的,但是,他们可以用不同的方式使你的代码高效。 让我们假设你创build了一个服务器,并且通过使用“.addListener(event,listener)”为每个连接到你的服务器的用户创build一个监听器。 现在,只要用户断开连接,可以使用命令“removeListener”删除该监听器,但不能删除“.on(event,listener)”命令。 所以,你可以将这两个命令用于不同的情况。