EventEmitter和NodeEventTarget的区别
EventEmitter: 所有的EventEmitters在添加新的监听器时发出 “newListener “事件,在删除现有的监听器时发出 “removeListener “事件。它是由事件模块定义和暴露的。
要导入EventEmitter,使用以下导入语句 –
const EventEmitter = require('events');
NodeEventTarget: EventTarget
和 Event
对象是EventTarget Web API的Node.js特定实现,该API由一些Node.js核心API暴露。
EventEmitter和NodeEventTarget之间的区别 –
事件发射器 | 节点事件目标 |
---|---|
事件发射器继承自JavaScript的事件模块。 | 节点事件目标是EventEmitter API的一个修改的子集,并继承于它。 |
事件发射器实现了与事件模块的is-a关系。 | 节点事件目标实现了与EventTarget API的is-a关系。 |
在EventEmitter中,对于同一个事件,可以允许多个监听器被注册。 | 任何监听器都可以为每个事件类型注册一次,如果试图多次注册一个监听器,它会被忽略。 |
事件发射器模拟了大部分的事件,如’error’、’Classes’、Emits等。 | 节点事件目标不模拟完整的EventEmitter APIs,如prependListener(), prependOnceListener(), rawListeners()等等。 |
事件发射器的默认行为是记录信息并结束当前的执行。 | 对于 “错误 “类型的事件,它没有实现任何默认行为。 |
如果在EventEmitter实例中发生错误,那么典型的行为是发出一个 “错误 “事件。 | 节点事件目标支持EventListener对象和函数作为所有事件类型的处理程序。 |
所有的EventEmitter在添加新的监听器时发出 “newListener “事件,在移除监听器时发出 “removeListener “事件。 | 节点事件目标不是EventEmitter的一个实例,在大多数情况下,它不能代替EventEmitter使用。 |