const eventHub = {
queueMap:{},
on:(name,f)=>{
eventHub.queueMap[name] = eventHub.queueMap[name] || []
eventHub.queueMap[name].push(f)
},
off:(name,f)=>{
const q = eventHub.queueMap[name]
if(!q){
return
}
const index = q.indexOf(f)
if(index < 0){
return
}
q.splice(index,1)
},
emit:(name,data)=>{
const q = eventHub.queueMap[name]
if(!q){
return
}
q.map(f =>f.call(undefined, data))
},
once:(name,f)=>{
const wrapper = (data) =>{
eventHub.off(name,wrapper)
f.call(undefined,data)
}
eventHub.on(name,wrapper)
},
}
eventHub.on("click",console.log)
eventHub.once("click",console.error)
setTimeout(()=>{
eventHub.emit("click","hello")
},3000)