class PubSub {
constructor(){
this.list = {}
}
on(name,fn){
if(this.list[name]){
this.list[name].push(fn)
}else{
this.list[name] = [fn]
}
}
off(name,fn){
let task = this.list[name];
if(task){
let index = task.findIndex(f === fn || f === fn.callback)
this.list[name].splice(index,1)
}
}
emit(name,once, ...args){
if(this.list[name]){
for( let fn of this.list[name]){
fn(...args)
}
}
if(once){
delete this.list[name]
}
}
}
let eventBus = new PubSub()
let fn1 = function(name, age) {
console.log(`${name} ${age}`)
}
let fn2 = function(name, age) {
console.log(`hello, ${name} ${age}`)
}
eventBus.on('a', fn1)
eventBus.on('a', fn2)
eventBus.emit('a', false, '隔壁老王', 12)