一.发布订阅者模式:
class EventEmitter {
constructor(){
this.arr={}//数组对象
}
//订阅对象的方法
on(name,callback){
if(this.arr.name){
this.arr.name.push(callback)
}else{
this.arr.name=[callback]
}
}
//触发事件的方法
emit(name,...args){
if(this.arr.name){
this.arr.name.forEach(element => {
element.apply(this,args)
})
}
}
//删除事件的方法
remove(name,callback){
if(this.arr.name){
this.arr.name.filter(element => {
return element!=callback
})
}
}
//只调用一次就删除的方法
once(name,callback){
//将callback封装在fn中,先放入arr中,执行后fn被删除
const fn=()=>{
callback()
this.remove(name,fn)
}
this.on(name,fn)
}
}
二:观察者模式: