电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

JavaScript中EventBus實現對象之間通信

瀏覽:121日期:2023-10-10 17:15:19

一、什么是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
相關文章:
主站蜘蛛池模板: 新疆乌鲁木齐网站建设-乌鲁木齐网站制作设计-新疆远璨网络 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | jrs高清nba(无插件)直播-jrs直播低调看直播-jrs直播nba-jrs直播 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 香港新时代国际美容美发化妆美甲培训学校-26年培训经验,值得信赖! | 粉末冶金注射成型厂家|MIM厂家|粉末冶金齿轮|MIM零件-深圳市新泰兴精密科技 | Jaeaiot捷易科技-英伟达AI显卡模组/GPU整机服务器供应商 | 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 超声波焊接机,振动摩擦焊接机,激光塑料焊接机,超声波焊接模具工装-德召尼克(常州)焊接科技有限公司 | 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 湖南档案密集架,智能,物证,移动,价格-湖南档案密集架厂家 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | DNA亲子鉴定_DNA基因检测中心官方预约平台-严选好基因网 | 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 郑州外墙清洗_郑州玻璃幕墙清洗_郑州开荒保洁-河南三恒清洗服务有限公司 | 礼堂椅厂家|佛山市艺典家具有限公司 | 石英砂矿石色选机_履带辣椒色选机_X光异物检测机-合肥幼狮光电科技 | 沧州友城管业有限公司-内外涂塑钢管-大口径螺旋钢管-涂塑螺旋管-保温钢管生产厂家 | 长城人品牌官网 | 湖南档案密集架,智能,物证,移动,价格-湖南档案密集架厂家 | 玉米深加工设备-玉米深加工机械-新型玉米工机械生产厂家-河南粮院机械制造有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛婚外情取证-青岛王军侦探事务所 | 成都软件开发_OA|ERP|CRM|管理系统定制开发_成都码邻蜀科技 | 避光流动池-带盖荧光比色皿-生化流动比色皿-宜兴市晶科光学仪器 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 纯化水设备-EDI-制药-实验室-二级反渗透-高纯水|超纯水设备 | 液压扳手-高品质液压扳手供应商 - 液压扳手, 液压扳手供应商, 德国进口液压拉马 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 挤塑板-XPS挤塑板-挤塑板设备厂家[襄阳欧格] | 预制舱-电力集装箱预制舱-模块化预制舱生产厂家-腾达电器设备 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 在线钠离子分析仪-硅酸根离子浓度测定仪-油液水分测定仪价格-北京时代新维测控设备有限公司 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! |