JavaScript中EventBus實現對象之間通信
一、什么是EventBus?
我個人理解:EventBus 可以實現對象之間的通信,當數據或某些特性發(fā)生改變時,能自動監(jiān)聽事件作出一些改變。還有更多的內容可能我還沒有拓寬。怎么實現通信呢?這里通過一個例子可以理解到其中的精髓。
二、一個簡單的例子
add(){ data+=1; render(data); }, minus(){ data-=1; render(data); }, multiply(){ data*=2; render(data); }, divide(){ data/=2; render(data); },
以上代碼是進行加減乘除的運算,數據data改變后,對數據data進行渲染,調用到渲染函數render();
有沒有覺得這樣很麻煩,代碼重復非常多,但是想表達的意思就是一個:data 只要進行更新,就調用一次渲染函數render()
問題來了:有沒有辦法簡化呢?只要data一改變,就自動調用render()函數
三、代碼演示實例
const eventbus=$({}); // 使用jQuery庫創(chuàng)建了一個eventbus。 let xx = { data:{ n:100, } } updata(data){ Object.assign(xx.data,data); //批量賦值 eventbus.trigger('updataed:xx.data'); //觸發(fā)事件,事件名為:'updataed:xx.data' } /* 調用jquer封裝的事件監(jiān)聽函數 */ eventbus.on('updataed:xx.data',()=>{ render(xx.data); }) /* 改進后的加減乘除函數 */ add(){ updata({n:xx.data.n+1}); }, minus(){ updata({n:xx.data.n-1}); }, multiply(){ updata({n:xx.data.n*2}); }, divide(){ updata({n:xx.data.n/2}); }
只要一調用updata()函數,就會使eventbus.trigger('updataed:xx.data')觸發(fā),然后事件監(jiān)聽就會觸發(fā),自動調用render()函數進行渲染
四、使用class 封裝+繼承EventBus
class EventBus{ constructor(){ this.eventbus=$(window); //使用jquery將eventbus掛載到全局window上 } on(eventName,fn){ this.eventbus.on(eventName,fn); } trigger(eventName){ this.eventbus.trigger(eventName); } off(eventName,fn){ this.eventbus.off(eventName,fn); } } const eventbus=new EventBus(); eventbus.trigger('updated:xx.data') eventbus.on('updated:xx.data',()=>{ render(xx.data); }) eventbus.off('updated:xx.data') /* 繼承EventBus */ class module extends EventBus{ constructor(){ super(); //必須繼承父類的構造函數constructor } } module.trigger('updated:xx.data') module.on('updated:xx.data',()=>{ render(xx.data); }) module.off('updated:xx.data')
為何要進行class 封裝和繼承EventBus?
答:為了讓代碼更加格式化,不僅在這里能用到EventBus,在其他地方也能使用上。尤其在模塊化的操作中,封裝+繼承這些就顯得十分的重要。這樣能讓代碼有更好的維護性。其他模塊使用到eventbus時的還能有更多的變樣,可以覆蓋重寫父類方法或者再添加一些方法。
到此這篇關于JavaScript中EventBus實現對象之間通信的文章就介紹到這了,更多相關JavaScript EventBus對象通信內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- JS addEventListener()和attachEvent()方法實現注冊事件
- JS事件循環(huán)機制event loop宏任務微任務原理解析
- Js on及addEventListener原理用法區(qū)別解析
- javascript事件循環(huán)event loop的簡單模型解釋與應用分析
- js中addEventListener()與removeEventListener()用法案例分析
- node.js中對Event Loop事件循環(huán)的理解與應用實例分析
- node.JS事件機制與events事件模塊的使用方法詳解
- JavaScript 鼠標事件(MouseEvent)案例講解
相關文章
JavaScript Event學習第四章 傳統的事件注冊模型
在這一章我會講解給元素注冊事件的最好的一種辦法,那就是:確保一個特定的事件在特定的HTML元素上發(fā)生并且能運行特定的腳本。2010-02-02javascript支持IE和firefox(FF)的漸變透明效果
DataThis可以發(fā)送任何標簽,這個標簽沒有ID也可以,因為用的是自定義屬性。2008-10-10