JS手写发布订阅

44 阅读1分钟
const eventHub = {
  map: {},
  on: (name,fn) => {
    eventHub.map[name] = eventHub.map[name] || []
    eventHub.map[name].push(fn)
  },
  emit: (name,payload) => {
    const queue = eventHub.map[name]
    if (!queue) return
    queue.map(fn=>fn.call(undefined,payload))
    return undefined
  },
  off: (name,fn) => {
    const queue = eventHub.map[name]
    if(!queue) return
    const index = queue.indexof(fn)
    if(index<0) return
    queue.splice(index,1)
  }
}

eventHub.on('click', console.log)
setTimeout(() => {
  eventHub.emit('click','hello')
}, 1000);