JavaScript中EventBus实现对象之间通信
#代码知识 发布时间: 2026-01-12
一、什么是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对象通信内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
代码知识SEO上一篇 : 自定义Django_rest_framework_jwt登陆错误返回的解决
下一篇 : 如何编写一个 Webpack Loader的实现
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!