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

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

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

 一、什么是EventBus?

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

二、一個(gè)簡單的例子

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

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

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

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

三、代碼演示實(shí)例

const eventbus=$({});  // 使用jQuery庫創(chuàng)建了一個(gè)eventbus。

let xx = {
  data:{
    n:100,
  }
}

updata(data){
  Object.assign(xx.data,data);  //批量賦值

  eventbus.trigger('updataed:xx.data');  //觸發(fā)事件,事件名為:'updataed:xx.data'
}

/* 調(diào)用jquer封裝的事件監(jiān)聽函數(shù) */
eventbus.on('updataed:xx.data',()=>{
  render(xx.data);
})

/* 改進(jìn)后的加減乘除函數(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});
}

只要一調(diào)用updata()函數(shù),就會(huì)使eventbus.trigger('updataed:xx.data')觸發(fā),然后事件監(jiān)聽就會(huì)觸發(fā),自動(dòng)調(diào)用render()函數(shù)進(jìn)行渲染

四、使用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();  //必須繼承父類的構(gòu)造函數(shù)constructor
  }
}

module.trigger('updated:xx.data')
module.on('updated:xx.data',()=>{
  render(xx.data);
})
module.off('updated:xx.data')

為何要進(jìn)行class 封裝和繼承EventBus?

答:為了讓代碼更加格式化,不僅在這里能用到EventBus,在其他地方也能使用上。尤其在模塊化的操作中,封裝+繼承這些就顯得十分的重要。這樣能讓代碼有更好的維護(hù)性。其他模塊使用到eventbus時(shí)的還能有更多的變樣,可以覆蓋重寫父類方法或者再添加一些方法。

到此這篇關(guān)于JavaScript中EventBus實(shí)現(xiàn)對(duì)象之間通信的文章就介紹到這了,更多相關(guān)JavaScript EventBus對(duì)象通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    JS location幾個(gè)方法小姐

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

    你不知道的 TypeScript 高級(jí)類型(小結(jié))

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

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

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

    常用的javascript function代碼

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

    javascript 四十條常用技巧大全

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

最新評(píng)論

巩留县| 柳河县| 武邑县| 冀州市| 慈溪市| 奎屯市| 安康市| 灵石县| 冷水江市| 湖口县| 西峡县| 孝义市| 玛纳斯县| 九江县| 唐山市| 额尔古纳市| 四会市| 牡丹江市| 年辖:市辖区| 满城县| 繁昌县| 桦川县| 繁峙县| 泾川县| 赞皇县| 连江县| 和顺县| 东安县| 江阴市| 嘉义县| 荣昌县| 徐汇区| 遂平县| 启东市| 南平市| 广安市| 绥棱县| 广饶县| 靖州| 新宁县| 柳林县|