观察者模式

观察者模式 

class ObServer{

constructor(){

//{click:[handler1,handler2],mousemove:[handler1,handler2]}

this.obj = {}

}

//事件发布 事件名 处理函数

on(eventName,handler){

//判断这个eventName是否存在

//如果当前的事件名不存在 给他赋值一个空数组

if(!this.obj[eventName]){

this.obj[eventName] = []

}

//将事件添加进去

this.obj[eventName].push(handler)

}

//事件执行 事件名 参数

emit(eventName,...arg){

//判断这个eventName是否存在

if(!this.obj[eventName]) return

//获取这个事件里面所有的处理函数 执行这些处理函数

//遍历对应的处理函数数组

this.obj[eventName].forEach(handler=>{

//执行对应的处理函数 传入参数

handler.call(this,...arg)

})

}

//事件取消 事件名 处理函数

off(eventName,handler){

//判断这个eventName是否存在

if(!this.obj[eventName]) return

//遍历对应的eventName里面处理函数数组 找到匹配的handler将他删除

this.obj[eventName].forEach((v,i)=>{

if(Object.is(v,handler)){

this.obj[eventName].splice(i,1)

}

})

}

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容