手写发布订阅

70 阅读1分钟

发布订阅

const eventHub = {
 map: {
   // click: [f1, f2]
 },
 on: (name,fn) => {
 eventHub.map[name] = eventHub.map[name] || []
 eventHub.map[name].push(fn)
 },
 emit: (name, data) => {
 const q =eventHub.map[name]
 if(!q) return
 q.map(f => f.call(null, data))
 return undefined
 },
 off: (name, fu) => {
 const q =eventHub.map[name]
 if(!q){ return }
 const index = q.indexOF(fn)
 if(index < 0) { return }
 q.splice(index, 1)
 }
}

eventHub.on('click', console.log)
eventHub.on('click', console.error)

setTimeout(() => {
  eventHub.emit('click','hi')
},3000)