封装EventBus

文章介绍了使用JavaScript构建一个简单的EventBus类,该类支持订阅($on)和发布($emit)事件功能。示例中展示了如何订阅say和hello事件,并在触发这些事件时执行相应的回调函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
  // bus
  /* {
    say: [callback1, callback2],
    hello: [callback1]
  } */
  class EventBus {
    constructor() {
      // 什么时候走的?new EventBus() 就会走这儿
      // this 是谁?实例
      this.bus = {}
    }
    // 原型方法
    $on(eventType, callback) {
      if(this.bus[eventType]) {
        this.bus[eventType].push(callback)
      } else {
        this.bus[eventType] = [callback]
      }
    }

    $emit(eventType, ...args) {
      this.bus[eventType].forEach(callback => callback(...args))
    }
  }

  const bus = new EventBus()
  // 订阅
  bus.$on('say', (num1, num2) => {
    console.log(num1 + num2 + '~')
  });

  bus.$on('say', (num1, num2) => {
    console.log(num1 + num2 + '~~')
  });

  bus.$on('hello', (msg) => {
    console.log(msg)
  });

  // 发布
  // 把 this.bus 对应的 say 对应的值,就是数组,把数组中的函数都调用一下
  bus.$emit('say', 1, 2);
  bus.$emit('hello', 'Hello');
  </script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值