前端知识点简记

发布订阅模式

2021-12-17  本文已影响0人  IOneStar

发布订阅模式

优点:监听事件的位置和触发事件的位置不受限制。

写出一个具有事件监控(on,有的时候也叫做 subscribe),事件触发(emit, 有的时候也叫做 publish),删除事件(off)的 EventEmitter。
(同Vue中的EventBus实现)

class TestEventEmitter {
  // 存储事件类型及函数的对应关系
  constructor() {
    this.eventMap = {};
  }
  // type为事件类型名称
  on(type, handler) {
    if (!handler instanceof Function) {
      throw new Error('请传入一个函数');
    }
    // 当前事件类型对应的队列是否存在
    if (!this.eventMap[type]) {
      this.eventMap[type] = [];
    }
    this.eventMap[type].push(handler);
  }
  emit(type, params) {
    // 如果存在事件类型对应的队列,就挨个执行
    if (this.eventMap[type]) {
      this.eventMap[type].forEach((handler, index) => {
        handler(params);
      });
    }
  }
  off(type, handler) {
    if (this.eventMap[type]) {
      this.eventMap[type].splice(this.eventMap[type].indexOf(handler), 1);
    }
  }
}
const a = new TestEventEmitter();

function testHandler(params) {
  console.log(`test事件被触发,参数为${params}`);
}

a.on('test', testHandler);
a.emit('test', 'aaa');
上一篇 下一篇

猜你喜欢

热点阅读