自定义事件总线

简介: JS查漏补缺系列是我在学习JS高级语法时做的笔记,通过实践费曼学习法进一步加深自己对其的理解,也希望别人能通过我的笔记能学习到相关的知识点。这一次我们来试着自定义事件总线

知识回顾

事件总线属于一种观察者模式,其中包括三个角色:

  • 发布者(Publisher):发出事件(Event);
  • 订阅者(Subscriber):订阅事件(Event),并且会进行响应(Handler);
  • 事件总线(EventBus):无论是发布者还是订阅者都是通过事件总线作为中台的;

当然我们可以选择一些第三方的库:

  • Vue2默认是带有事件总线的功能;
  • Vue3中推荐一些第三方库,比如mitt;

自定义事件总线

:::info
实现功能:事件的监听方法on; 事件的发射方法emit; 事件的取消监听off;
:::
大体框架

class HYEventBus {
  constructor() {
    this.eventBus = {}
  }

  // 监听
  on() {
    
  }

  // 取消
  off() {
   
  }

  // 发送
  emit() {
  
  }
}

事件的监听方法on

 on(eventName, eventCallback, thisArg) {
    let handlers = this.eventBus[eventName]
    if (!handlers) {
      handlers = []
      this.eventBus[eventName] = handlers
    }
    handlers.push({
      eventCallback,
      thisArg
    })
  }

事件的取消监听off

 off(eventName, eventCallback) {
    const handlers = this.eventBus[eventName]
    if (!handlers) return
    const newHandlers = [...handlers]
    for (let i = 0; i < newHandlers.length; i++) {
      const handler = newHandlers[i]
      if (handler.eventCallback === eventCallback) {
        const index = handlers.indexOf(handler)
        handlers.splice(index, 1)
      }
    }
  }

事件的发射方法emit

emit(eventName, ...payload) {
    const handlers = this.eventBus[eventName]
    if (!handlers) return
    handlers.forEach(handler => {
      handler.eventCallback.apply(handler.thisArg, payload)
    })
  }

使用

const eventBus = new HYEventBus()

// main.js
eventBus.on("abc", function() {
  console.log("监听abc1", this)
}, {name: "玛卡巴卡"})

const handleCallback = function() {
  console.log("监听abc2", this)
}
eventBus.on("abc", handleCallback, {name: "玛卡巴卡"})

// utils.js
eventBus.emit("abc", 123)

// 移除监听
eventBus.off("abc", handleCallback)
eventBus.emit("abc", 123)
目录
相关文章
|
3月前
|
Linux
统一事件源
统一事件源
30 0
|
5月前
|
JSON 数据格式
EventBridge事件领域
EventBridge事件领域
26 0
|
消息中间件 机器学习/深度学习 Kubernetes
EventBridge 事件总线及 EDA 架构解析
EventBridge 是事件驱动的具体落地产品,也是 EDA 的最佳实践方式。
339 0
EventBridge 事件总线及 EDA  架构解析
|
弹性计算 Kubernetes 数据可视化
EventBridge 特性介绍|以 IaC 的方式使用 EventBridge
本文将重点介绍 EventBridge 和 IaC 的重点概念和特性,然后演示如何应用 IaC 理念自动化部署 EventBridge 来使用这些概念和特性。
228 0
EventBridge 特性介绍|以  IaC 的方式使用 EventBridge
|
API 调度
阿里云事件总线 EventBridge 最佳实践
本文介绍如何把阿里云事件总线 EventBridge 的内容接入观测云平台,通过观测云强大的统一汇聚能力轻松获取阿里云事件,实时追踪最新的数据信息。
187 0
|
消息中间件 机器人 Serverless
|
存储 运维 数据可视化
EventBridge 事件总线及 EDA 架构解析(二)| 学习笔记
快速学习 EventBridge 事件总线及 EDA 架构解析。
160 0
EventBridge 事件总线及 EDA 架构解析(二)| 学习笔记
|
新零售 数据可视化 中间件
EventBridge 事件总线及 EDA 架构解析(三)| 学习笔记
快速学习 EventBridge 事件总线及 EDA 架构解析。
162 0
EventBridge 事件总线及 EDA 架构解析(三)| 学习笔记
|
XML 缓存 前端开发
EventBridge 事件总线及 EDA 架构解析(一)| 学习笔记
快速学习 EventBridge 事件总线及 EDA 架构解析。
373 0
EventBridge 事件总线及 EDA 架构解析(一)| 学习笔记