js发布订阅模式

66 阅读1分钟
  1. 定义一个事件对象,用来保存事件和回调函数
let eventObj = {
  events: {
    // eventName: [fn1, fn2`]`
  }
}
  1. 提供订阅接口,往事件对象中添加回调函数
function subscribe(eventName, fn) {
  eventObj.events[eventName] = eventObj.events[eventName] || [];
  eventObj.events[eventName].push(fn); 
}
  1. 提供发布接口,执行事件对象中存储的回调函数
function publish(eventName, data) {
  if(eventObj.events[eventName]) {
    eventObj.events[eventName].forEach(fn => fn(data));
  }
}
  1. 使用方式
// 订阅
subscribe('event1', fn1); 
subscribe('event1', fn2);

// 发布
publish('event1', 'hello');