eventBus.js 779 B

1234567891011121314151617181920212223242526272829303132
  1. const eventBus = {
  2. // 存储所有事件和对应的订阅者
  3. eventList: new Map(),
  4. // 订阅事件
  5. on(event, callback) {
  6. if (!this.eventList.has(event)) {
  7. this.eventList.set(event, new Set())
  8. }
  9. this.eventList.get(event).add(callback)
  10. },
  11. // 取消订阅事件
  12. off(event, callback) {
  13. if (this.eventList.has(event)) {
  14. const callbacks = this.eventList.get(event)
  15. callbacks.delete(callback)
  16. if (callbacks.size === 0) {
  17. this.eventList.delete(event)
  18. }
  19. }
  20. },
  21. // 发布事件
  22. emit(event, ...args) {
  23. if (this.eventList.has(event)) {
  24. const callbacks = this.eventList.get(event)
  25. callbacks.forEach((callback) => {
  26. callback.call(null, ...args)
  27. })
  28. }
  29. }
  30. }
  31. module.exports = eventBus