简体   繁体   English

EventEmitter、EventTarget 和 EventDispatcher 有什么区别

[英]What are the differences between EventEmitter, EventTarget and EventDispatcher

I'm trying to learn implementations of Observer Pattern.我正在尝试学习观察者模式的实现。

EventEmitter/EventTarget/EventDispatcher are one implementation of Observer Pattern but I wonder the differences between these three. EventEmitter/EventTarget/EventDispatcher 是观察者模式的一种实现,但我想知道这三者之间的区别。

Any help would be appreciated?任何帮助,将不胜感激?

You can easily find documentation about all of them I think:你可以很容易地找到关于我认为所有这些的文档:

I would like to mention a detail difference when adding the same listener.我想在添加相同的侦听器时提到一个细节差异。

EventEmitter:事件发射器:

const EventEmitter = require('node:events')

const foo = new EventEmitter()
foo.on('event', listener)
foo.on('event', listener)
foo.emit('event')
// called: 1
// called: 2

function listener() {
  console.count('called')
}

EventTarget:活动目标:

const foo = new EventTarget()
foo.addEventListener('event', listener)
foo.addEventListener('event', listener)
foo.dispatchEvent(new Event('event'))
// called: 1

function listener() {
  console.count('called')
}

// ------

const foo = new EventTarget()
foo.addEventListener('event', listener, { once: true })
foo.addEventListener('event', listener)
foo.dispatchEvent(new Event('event'))
foo.dispatchEvent(new Event('event'))
// called: 1

function listener() {
  console.count('called')
}

// -----

const foo = new EventTarget()
foo.addEventListener('event', listener)
foo.addEventListener('event', listener, { once: true })
foo.dispatchEvent(new Event('event'))
foo.dispatchEvent(new Event('event'))
// called: 1
// called: 2

function listener() {
  console.count('called')
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 委托:Angular 中的 EventEmitter 或 Observable - Delegation: EventEmitter or Observable in Angular 我应该在 EventDispatcher/Observable 中捕获 Exception、Throwable 或其他 - Should I catch Exception, Throwable or other in EventDispatcher/Observable 为什么Symfony EventDispatcher对事件使用任意名称而不是基于类的传播? - Why does Symfony EventDispatcher use arbitrary names for events instead of class-based propagation? 界面和设计模式有什么区别? - What's the difference between an interface and a design pattern? 观察者模式和反应式编程有什么区别? - What is difference between observer pattern and reactive programming? java中的回调和观察者模式有什么区别 - what's difference between a callback and observer pattern in java 观察者(设计模式),事件总线(greenroboto),LiveData(安卓)之间有什么区别? - What is the difference between observer(design pattern), eventbus(greenroboto), LiveData(Android)? 观察者模式和主题观察者模式有什么区别 - What is the difference between the Observer and Subject-Observer patterns Angular 在组件之间同步对象 - Angular synchronize objects between components 对象之间的C ++通信 - C++ communication between objects
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM