在这里我无法理解这两种方法之间的基本区别。
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');
答案 0 :(得分:66)
.on()
与EventEmitter对象中的.addListener()
完全相同。
EventEmitter.prototype.on = EventEmitter.prototype.addListener;
通过GitHub存储库,从2010年7月3日开始this checkin包含评论: “实验:'on'作为'addListener'的别名” < /强>
2017年更新 documentation for EventEmitter.prototype.addListener()
现在说:
emitter.on(eventName, listener)
的别名。
答案 1 :(得分:1)
它们的功能完全相同,但是,它们可以以不同的方式使用,以使您的代码更有效。让我们假设您创建了一个服务器,并为每个连接到您的服务器的用户使用“.addListener(event,listener)”创建一个监听器。现在,只要用户断开连接,就可以使用命令“removeListener”删除该侦听器,但不能删除“.on(event,listener)”命令。因此,您可以将这两个命令用于不同的情况。
答案 2 :(得分:1)
是的,您可以使用&#34; removeListener&#34;使用&#34; on&#34;创建一个监听器。试试吧。
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.");
答案 3 :(得分:0)
添加到:v10.0.0
emitter.off(eventName, listener)
emitter.removeListener()
的别名
答案 4 :(得分:0)
也可以参考addEventListener vs onclick: Which one should you draft into your fantasy football team?
并且可以通过 event-target-shim 使用 HTML 浏览器之类的事件,正如 @flyskywhy/react-native-browser-polyfill 所做的那样。