class EventBus {
constructor() {
// eventMap 用來存儲(chǔ)事件和監(jiān)聽函數(shù)之間的關(guān)系
this.eventMap = {};
}
// type 這里就代表事件的名稱
on(type, handler) {
// hanlder 必須是一個(gè)函數(shù)梢睛,如果不是直接報(bào)錯(cuò)
if (!(handler instanceof Function)) {
throw new Error("哥 你錯(cuò)了 請(qǐng)傳一個(gè)函數(shù)");
}
// 判斷 type 事件對(duì)應(yīng)的隊(duì)列是否存在
if (!this.eventMap[type]) {
// 若不存在,新建該隊(duì)列
this.eventMap[type] = [];
}
// 若存在纺且,直接往隊(duì)列里推入 handler
this.eventMap[type].push(handler);
}
// 別忘了我們前面說過觸發(fā)時(shí)是可以攜帶數(shù)據(jù)的踩身,params 就是數(shù)據(jù)的載體
emit(type, params) {
// 假設(shè)該事件是有訂閱的(對(duì)應(yīng)的事件隊(duì)列存在)
if (this.eventMap[type]) {
// 將事件隊(duì)列里的 handler 依次執(zhí)行出隊(duì)
this.eventMap[type].forEach((handler, index) => {
// 注意別忘了讀取 params
handler(params);
});
}
}
off(type, handler) {
if (this.eventMap[type]) {
this.eventMap[type].splice(this.eventMap[type].indexOf(handler) >>> 0, 1);
}
}
}
export default EventBus;
簡(jiǎn)單的發(fā)布訂閱
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門殖演,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人年鸳,你說我怎么就攤上這事剃氧。” “怎么了阻星?”我有些...
- 文/不壞的土叔 我叫張陵朋鞍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我妥箕,道長(zhǎng)滥酥,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任畦幢,我火速辦了婚禮坎吻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宇葱。我一直安慰自己瘦真,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布黍瞧。 她就那樣靜靜地躺著诸尽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪印颤。 梳的紋絲不亂的頭發(fā)上您机,一...
- 文/蒼蘭香墨 我猛地睜開眼僵朗,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼赖欣!你這毒婦竟也來了屑彻?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對(duì)情侶失蹤畏鼓,失蹤者是張志新(化名)和其女友劉穎酱酬,沒想到半個(gè)月后壶谒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體云矫,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年汗菜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了让禀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站俏扩,受9級(jí)特大地震影響糜工,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜录淡,卻給世界環(huán)境...
- 文/蒙蒙 一捌木、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嫉戚,春花似錦刨裆、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至窍帝,卻和暖如春链瓦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盯桦。 一陣腳步聲響...
- 正文 我出身青樓贴膘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親略号。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刑峡,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- zookeeper主要的功能是數(shù)據(jù)的存儲(chǔ)與分配洋闽,zookeeper的API可以根據(jù)開發(fā)者的需求設(shè)計(jì)不同的工作模式,...
- 1 寫一個(gè)發(fā)布(Publiser)功能的Node Node是連接到ROS網(wǎng)絡(luò)的可執(zhí)行程序突梦,是ROS的一個(gè)術(shù)語〗刖耍現(xiàn)在...
- 背景 在業(yè)務(wù)開發(fā)中,經(jīng)常會(huì)遇到要處理跨頁(yè)面通信的問題宫患,比如說用戶打開了一個(gè)網(wǎng)站刊懈,網(wǎng)站的某些頁(yè)面需要根據(jù)用戶的登錄的...