最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中EventBus實現(xiàn)對象之間通信

 更新時間:2020年10月18日 16:56:12   作者:soloplayer  
這篇文章主要介紹了JavaScript中EventBus實現(xiàn)對象之間通信,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

 一、什么是EventBus?

我個人理解:EventBus 可以實現(xiàn)對象之間的通信,當數(shù)據或某些特性發(fā)生改變時,能自動監(jiān)聽事件作出一些改變。還有更多的內容可能我還沒有拓寬。怎么實現(xiàn)通信呢?這里通過一個例子可以理解到其中的精髓。

二、一個簡單的例子

add(){
  data+=1;
  render(data);
},
minus(){
  data-=1;
  render(data);
},
multiply(){
  data*=2;
  render(data);
},
divide(){
  data/=2;
  render(data);
},

以上代碼是進行加減乘除的運算,數(shù)據data改變后,對數(shù)據data進行渲染,調用到渲染函數(shù)render();

有沒有覺得這樣很麻煩,代碼重復非常多,但是想表達的意思就是一個:data 只要進行更新,就調用一次渲染函數(shù)render()

問題來了:有沒有辦法簡化呢?只要data一改變,就自動調用render()函數(shù)

三、代碼演示實例

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)聽函數(shù) */
eventbus.on('updataed:xx.data',()=>{
  render(xx.data);
})

/* 改進后的加減乘除函數(shù) */

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()函數(shù),就會使eventbus.trigger('updataed:xx.data')觸發(fā),然后事件監(jiān)聽就會觸發(fā),自動調用render()函數(shù)進行渲染

四、使用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();  //必須繼承父類的構造函數(shù)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實現(xiàn)對象之間通信的文章就介紹到這了,更多相關JavaScript EventBus對象通信內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • ES6(ECMAScript 6)新特性之模板字符串用法分析

    ES6(ECMAScript 6)新特性之模板字符串用法分析

    這篇文章主要介紹了ES6(ECMAScript 6)新特性之模板字符串用法,簡單介紹了ES6模板字符串的概念、功能并結合實例形式分析了ES6模板字符串的用法,需要的朋友可以參考下
    2017-04-04
  • JavaScript數(shù)組push方法使用注意事項

    JavaScript數(shù)組push方法使用注意事項

    push() 方法可向數(shù)組的末尾添加一個或多個元素,并返回新的長度。這篇文章主要介紹了JavaScript數(shù)組push方法使用注意,需要的朋友可以參考下
    2017-10-10
  • AjaxUpLoad.js實現(xiàn)文件上傳功能

    AjaxUpLoad.js實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細介紹了AjaxUpLoad.js實現(xiàn)文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • JavaScript中判斷數(shù)據類型的方法總結

    JavaScript中判斷數(shù)據類型的方法總結

    這篇文章主要為大家詳細介紹了一些JavaScript中判斷數(shù)據類型的方法,文中的示例代碼講解詳細,具有一定的學習價值,需要的小伙伴可以了解一下
    2023-07-07
  • 一文帶你了解JavaScript函數(shù)柯里化

    一文帶你了解JavaScript函數(shù)柯里化

    柯里化(Currying)是把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)(最初函數(shù)的第一個參數(shù))的函數(shù),并且返回接受余下的參數(shù)且返回結果的新函數(shù)的技術。本文將通過一些示例帶大家深入了解JS的函數(shù)柯里化,需要的可以參考一下
    2023-02-02
  • JS location幾個方法小姐

    JS location幾個方法小姐

    整理下面的方法,利用使用js獲取url參數(shù)的朋友
    2008-07-07
  • 你不知道的 TypeScript 高級類型(小結)

    你不知道的 TypeScript 高級類型(小結)

    這篇文章主要介紹了你不知道的 TypeScript 高級類型(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 使用非html5實現(xiàn)js板連連看游戲示例代碼

    使用非html5實現(xiàn)js板連連看游戲示例代碼

    連連看游戲通常情況下都是使用html5來實現(xiàn)的,不過從現(xiàn)在開始就可以使用js來實現(xiàn)了,具體的代碼如下,喜歡的朋友可以參考下,希望對大家有所幫助
    2013-09-09
  • 常用的javascript function代碼

    常用的javascript function代碼

    一些javascript常見函數(shù),方便當作學習參考
    2008-05-05
  • javascript 四十條常用技巧大全

    javascript 四十條常用技巧大全

    本文給大家整理了有關js四十條常用技巧,本文介紹的非常詳細,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09

最新評論

尤溪县| 九台市| 东辽县| 额尔古纳市| 科技| 翁牛特旗| 铅山县| 讷河市| 新晃| 佳木斯市| 博客| 建水县| 博客| 略阳县| 昆明市| 东乌珠穆沁旗| 郴州市| 凉城县| 武定县| 鄱阳县| 云龙县| 繁昌县| 垣曲县| 景洪市| 哈巴河县| 邢台县| 通化市| 民权县| 教育| 上思县| 简阳市| 金溪县| 华容县| 东安县| 团风县| 哈巴河县| 东乡| 灵宝市| 吉木乃县| 尉犁县| 惠水县|