<script>
let events = (function(){
let eventParams = {} // 容器,新增删除订阅者等操作都要基于它,
// 订阅
function on(key,hanlder){
// on主要把订阅者存入全局容器 以第一个入参为key第二个参数为回调函数
if(!key) return
(eventParams[key] || (eventParams[key] = [])).push(hanlder)
}
// 移除事件
function off(key,hanlder){
let args = [...arguments].length
let list = eventParams[key]
if(args === 0) {
eventParams = {} // 无入参全清空
}else if(args === 1){
eventParams[key] = [] // 一个入参针对进行清空
}else { // 两个入参进行函数比对,移除
list.forEach((ele,i)=>{
if(ele === hanlder) {
list.splice(i,1)
}
})
}
}
// 发布
function emit(key,params){
let keys = eventParams[key]
if(!keys) return
keys.forEach(ele => {
ele.call(null,params) // 执行这个事件下的所以函数
});
}
return {
on,off,emit
}
})()
events.on('click',fn1)
events.on('click',fn2)
events.on('dbclick',fn2)
events.off('click')
events.emit('click','左')
events.emit('dbclick','22左')
function fn1(e){
console.log('fn1'+e)
}
function fn2(e){
console.log('fn2' + e)
}
</script>
js 发布订阅模式之eventBus
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1,简介 1)EventBus实现了观察者模式,是Google.Guava提供的消息发布-订阅类库。2)Multi...
- Table of Contents 系列文章目录[#%E7%B3%BB%E5%88%97%E6%96%87%E7%...
- 观察者模式中主体和观察者是互相感知的,发布/订阅者模式是借助第三方来实现调度的,发布者和订阅者之间互不感知。 接下...