写一个简单的EventBus

由于需要将事件和监听函数映射起来,考虑使用对象存储两者的对应关系。
简单代码逻辑如下:

class EventBus {
  static pinstance;
  listener = {};

  on(event, fn) {
    if (this.listener[event]) {
      this.listener[event].push(fn);
    } else {
      this.listener[event] = [fn];
    }
  }

  off(event, fn) {
    if (this.listener[event]) {
      const index = this.listener[event].find(item => item === fn);
      this.listener[event].splice(index, 1);
    }
  }

  emit(event, params) {
    if (this.listener[event]) {
      this.listener[event].forEach(item => {
        item(params);
      })
    }
  }

  static get instance() {
    if (!this.pinstance) {
      this.pinstance = new EventBus();
    }
    return this.pinstance;
  }
}
export default EventBus

使用的时候利用类的单例模式特性

EventBus.instance.on....
EventBus.instance.off...
EventBus.instance.emit....
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容