eventbus 了解吗?on 和 emit 功能?如何设计 on?手写一下

eventbus是一个实现组件间通信的工具,主要包含on和emit两个方法:

  • on方法用于监听事件
  • emit方法用于触发事件

on方法需要能够订阅指定事件,并根据事件触发时传入的数据执行回调函数。

一种简单的设计思路:

class EventBus {
  constructor() {
    this.events = {}; 
  }

  on(eventName, callback) {
    if(!this.events[eventName]) {
      this.events[eventName] = [];
    }
    this.events[eventName].push(callback);
  }

  emit(eventName, ...args) {
    if(this.events[eventName]) {
      this.events[eventName].forEach(cb => cb(...args));
    }
  }
}

const bus = new EventBus();

// 使用示例:
bus.on('message', (msg) => {
  console.log('received message: ' + msg); 
})

bus.emit('message', 'Hello World');

这样通过on方法可以订阅事件,通过emit方法触发事件,从而实现组件间的消息通信与解耦。

我们也可以进一步优化,比如增加once方法只监听一次,off方法取消监听等等。但事件中心的核心思路就是提供发布与订阅的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值