事件总线
事件总线这个概念对你来说可能很陌生,但提到观察者(发布-订阅)模式,你也许就很熟悉。事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。
class EventBus{
constructor(){
//创建缓存对象
this.cache={}
}
on(name,fn){
//判断是否有该事件,新增或者推送
if(this.cache[name]){
this.cache[name].push(fn)
}else{
this.cache[name]=[fn]
}
}
off(name,fn){
let tasks=this.cache[name]
if(tasks){
const index=tasks.findIndex(f=>f===fn||f.callback===fn)
if(index>=0){
tasks.splice(index,1)
}
}
}
emit(name,once=false,...args){
if(this.cache[name]){
//浅拷贝一个副本
let tasks=this.cache[name].slice()
for(let fn of tasks){
fn(...args)
}
if(once){
delete this.cache[name]
}
}
}
}
const eventbus=new EventBus()
const fn1=function(name,age){
console.log(`${name},${age}`)
}
const fn2=function(name,age){
console.log(`hello${name},${age}`)
}
eventbus.on('demo',fn1)
eventbus.on('demo',fn2)
eventbus.emit('demo',false,'张三',18)