JavaScript中EventBus实现对象之间通信


Posted in Javascript onOctober 18, 2020

 一、什么是EventBus?

我个人理解:EventBus 可以实现对象之间的通信,当数据或某些特性发生改变时,能自动监听事件作出一些改变。还有更多的内容可能我还没有拓宽。怎么实现通信呢?这里通过一个例子可以理解到其中的精髓。

二、一个简单的例子

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库创建了一个eventbus。

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

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

  eventbus.trigger('updataed:xx.data');  //触发事件,事件名为:'updataed:xx.data'
}

/* 调用jquer封装的事件监听函数 */
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')触发,然后事件监听就会触发,自动调用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对象通信内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Javascript 相关文章推荐
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
Apr 08 Javascript
js替代copy(示例代码)
Nov 27 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
Jul 14 Javascript
jQuery 3.0中存在问题及解决办法
Jul 15 Javascript
微信小程序使用第三方库Underscore.js步骤详解
Sep 27 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
Mar 23 Javascript
基于iScroll实现下拉刷新和上滑加载效果
Jul 18 Javascript
ES6解构赋值的功能与用途实例分析
Oct 31 Javascript
axios向后台传递数组作为参数的方法
Aug 11 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
Sep 24 Javascript
jQuery开发仿QQ版音乐播放器
Jul 10 jQuery
使用refresh_token实现无感刷新页面
Apr 26 Javascript
vuex刷新后数据丢失的解决方法
Oct 18 #Javascript
JavaScript大数相加相乘的实现方法实例
Oct 18 #Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
Oct 18 #Javascript
vscode+gulp轻松开发小程序的完整步骤
Oct 18 #Javascript
详解VUE中的插值( Interpolation)语法
Oct 18 #Javascript
vue自定义树状结构图的实现方法
Oct 18 #Javascript
axios封装与传参示例详解
Oct 18 #Javascript
You might like
PHP获取表单textarea数据中的换行问题
2010/09/10 PHP
phpstrom使用xdebug配置方法
2013/12/17 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
详解Python map函数及Python map()函数的用法
2017/11/16 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
浅析Python 责任链设计模式
2020/09/11 Python
轻松掌握CSS3中的字体大小单位rem的使用方法
2016/05/24 HTML / CSS
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
留学推荐信写作指南
2014/01/25 职场文书
教师绩效工资方案
2014/02/01 职场文书
班长自荐书范文
2014/02/11 职场文书
春节晚会主持词
2014/03/24 职场文书
三方协议书范本
2014/04/22 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
保密工作整改报告
2014/11/06 职场文书
就业意向协议书
2015/01/29 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书