手写一个EventEmitter

128 阅读1分钟
class EventEmitter {
  constructor () {
    this.event = {}
  }
  on (name, func) {
    if (!this.event[name]) {
      this.event[name] = []
    }
    this.event[name].push(func)
  }
  emit(name, ...agrs) {
    if (this.event[name]) {
      this.event[name].forEach(cb => {
        cb(...agrs)
      })
    }
  }
  off(name, offcb) {
    if (this.event[name]) {
      let index = this.event[name].findIndex(cb => cb === offcb )
      this.event[name].splice(index, 1)
      if (!this.event[name].length) {
        delete this.event[name]
      }
    }
  }
}

let eventBus = new EventEmitter()
eventBus.on('speaker', (data) => {
  console.log('监听成功,它说:', data)
})
eventBus.emit('speaker', '都让开,我要说话')
eventBus.off('speaker')
eventBus.emit('speaker', '都让开,我要说话1,有人回答麽???')