/**
* 發(fā)布-訂閱 實現(xiàn)
*/
class PubSub {
constructor (){
// 訂閱的事件對象
this.events = {}
}
// 發(fā)布
publish(eventName, ...data){
if(this.events[eventName]){
// 遍歷執(zhí)行該事件的所有訂閱 回調(diào)
this.events[eventName].forEach(cb => {
// 繼承訂閱的回調(diào)方法,并把發(fā)布的參數(shù)傳過去,同時執(zhí)行其回調(diào)方法
cb.call(this, ...data)
});
}
}
// 訂閱
substribe(eventName, callback){
// 可能有多個地方訂閱同一個事件,所以每一個事件對象用數(shù)組保存
if(this.events[eventName]){
this.events[eventName].push(callback)
}else{
this.events[eventName] = [callback]
}
}
// 刪除訂閱
unSubstribe(eventName, callback){
if(this.events[eventName]){
this.events[eventName] = this.events[eventName].filter((cb)=>{
// 在當前事件數(shù)組中善已,剔除出事件回調(diào)和callback相同的訂閱
return cb !== callback;
})
}
}
}
// 發(fā)布-訂閱 調(diào)用
var pdd = new PubSub();
console.log('start');
// 訂閱回調(diào) 1
function subCallback(data, name){
console.log('訂閱到:age=' + data + name)
}
// 訂閱回調(diào) 2
function subCallback2(data, name){
console.log('訂閱2:age=' + data + name)
}
setTimeout(function(){
console.log('=====發(fā)布:age => 21=====')
pdd.publish('age', 21, 'hwb');
},1000)
console.log('訂閱:age')
pdd.substribe('age', subCallback);
pdd.substribe('age', subCallback2);
setTimeout(function(){
console.log('=====發(fā)布:age => 25=====')
pdd.publish('age', 25, 'hwb');
},2000)
setTimeout(function(){
console.log('****移除訂閱subCallback****')
pdd.unSubstribe('age', subCallback);
},2500)
setTimeout(function(){
console.log('=====發(fā)布:age => 30=====')
pdd.publish('age', 30, 'abc');
},3000)
javascript 實現(xiàn) 發(fā)布-訂閱模式
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門飒赃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人科侈,你說我怎么就攤上這事载佳。” “怎么了臀栈?”我有些...
- 文/不壞的土叔 我叫張陵蔫慧,是天一觀的道長。 經(jīng)常有香客問我权薯,道長姑躲,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任崭闲,我火速辦了婚禮肋联,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刁俭。我一直安慰自己橄仍,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著侮繁,像睡著了一般虑粥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宪哩,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼圆恤!你這毒婦竟也來了突倍?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布,位于F島的核電站踩衩,受9級特大地震影響嚼鹉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜驱富,卻給世界環(huán)境...
- 文/蒙蒙 一锚赤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧褐鸥,春花似錦线脚、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽姊舵。三九已至,卻和暖如春寓落,著一層夾襖步出監(jiān)牢的瞬間括丁,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 前言 一個多月前蚯窥,面試時被問到發(fā)布-訂閱模式,面試完就查閱資料學習了下塞帐。這篇文章我將記錄我對此的理解并用Javas...
- 什么是發(fā)布-訂閱模式拦赠? 發(fā)布-訂閱模式又叫觀察者模式,它定義對象間的一種一對多的依賴關系葵姥,當一個對象的狀態(tài)發(fā)生改變...
- 觀察者模式(Observer) 觀察者模式:定義了對象間一種一對多的依賴關系荷鼠,當目標對象 Subject 的狀態(tài)發(fā)...