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);