on是监听事件 emit是触发事件 off是取消监听事件
const eventHub = {
map: {},
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(data))
return undefined
},
off: (name,fn) => {
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',"123") },500 )