我的回答
class Observer {    constructor() {      this.ob = {}  }  depend(key, cb) {      if (!this.ob[key]) {      this.ob[key] = []    }    this.ob[key].push(cb)  }  notify(key) {    this.ob[key] && this.ob[key].forEach(cb => cb())     }}
参考回答
class EventEmitter {  constructor() {    // 存放订阅的名称和事件    this.events = {};  }  // 订阅事件的方法  on(eventName, callback) {    if(this.events[eventName]) {      // 事件是否存在,存在则追加一条订阅事件      this.events[eventName].push(callback);    } else {      // 不存在,新增一条事件数组      this.events[eventName] = [callback];    }  }  // 出发订阅的方法  emit(eventName) {    // 遍历执行所有订阅的事件    this.events[eventName] && this.events[eventName].forEach((cb) => cb());  }  // 移除订阅事件  removeListener(eventName, callback) {    if(this.events[eventName]) {      this.events[eventName] = this.events[eventName].filter((cb) => cb !== callback);    }  }  // 只执行一次订阅的事件,然后移除  once(eventName, callback) {    const fn = () => {      callback();      this.removeListener(eventName, fn);    };    this.on(eventName, fn);  }}const callback1 = () => {  console.log('callback1');};let eventEmitter = new EventEmitter();eventEmitter.on('click', () => {console.log('click');});eventEmitter.on('click', callback1);eventEmitter.emit('click');eventEmitter.removeListener('click', callback1);eventEmitter.emit('click');eventEmitter.once('once-click', () => {console.log('once-click');});eventEmitter.emit('once-click');eventEmitter.emit('once-click');