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

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

原生js實現的觀察者和訂閱者模式簡單示例

瀏覽:114日期:2024-05-12 15:49:39

本文實例講述了原生js實現的觀察者和訂閱者模式。分享給大家供大家參考,具體如下:

觀察者模式也叫 發布者-訂閱者模式,發布者發布事件,訂閱者監聽事件并做出反應

在傳統的前端解耦方面,觀察者模式作為比較常見一種設計模式,大量使用在各種框架類庫的設計當中。

核心代碼:

// eventProxy.js’use strict’;const eventProxy = { onObj: {}, oneObj: {}, on: function(key, fn) { if(this.onObj[key] === undefined) { this.onObj[key] = []; } this.onObj[key].push(fn); }, one: function(key, fn) { if(this.oneObj[key] === undefined) { this.oneObj[key] = []; } this.oneObj[key].push(fn); }, off: function(key) { this.onObj[key] = []; this.oneObj[key] = []; }, trigger: function() { let key, args; if(arguments.length == 0) { return false; } key = arguments[0]; args = [].concat(Array.prototype.slice.call(arguments, 1)); if(this.onObj[key] !== undefined && this.onObj[key].length > 0) { for(let i in this.onObj[key]) { this.onObj[key][i].apply(null, args); } } if(this.oneObj[key] !== undefined && this.oneObj[key].length > 0) { for(let i in this.oneObj[key]) { this.oneObj[key][i].apply(null, args); this.oneObj[key][i] = undefined; } this.oneObj[key] = []; } }}; export default eventProxy;

使用:引入全局事件類,或通過配置webpack將事件類設置為全局變量

import { eventProxy } from ’@/utils’ class Parent extends Component{ render() { return ( <div style={{marginTop:'50px'}}> <Child_1/> <Child_2/> </div> ); }}// componentDidUpdate 與 render 方法與上例一致class Child_1 extends Component{ componentDidMount() { setTimeout(() => { // 發布 msg 事件 console.log(eventProxy) eventProxy.trigger(’msg’, ’end’,’lll’); }, 5000); } render() { return ( <div>我是組件一</div> ) }}// componentDidUpdate 方法與上例一致class Child_2 extends Component{ state = { msg: ’start’ }; componentDidMount() { // 監聽 msg 事件 eventProxy.on(’msg’, (msg,mm) => { console.log(msg,mm) this.setState({ msg:msg }); }); } render() { return <div> <p>child_2 component: {this.state.msg}</p> </div> }}

參考:淘寶前端團隊技術庫

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 周易算网-八字测算网 - 周易算网-宝宝起名取名测名字周易八字测算网 | 上海租奔驰_上海租商务车_上海租车网-矢昂汽车服务公司 | 水冷散热器_水冷电子散热器_大功率散热器_水冷板散热器厂家-河源市恒光辉散热器有限公司 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | 铁盒_铁罐_马口铁盒_马口铁罐_铁盒生产厂家-广州博新制罐 | 脱硝喷枪-氨水喷枪-尿素喷枪-河北思凯淋环保科技有限公司 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 打包箱房_集成房屋-山东佳一集成房屋有限公司 | 艾乐贝拉细胞研究中心 | 国家组织工程种子细胞库华南分库 | 光泽度计_测量显微镜_苏州压力仪_苏州扭力板手维修-苏州日升精密仪器有限公司 | 轻型地埋电缆故障测试仪,频响法绕组变形测试仪,静荷式卧式拉力试验机-扬州苏电 | AR开发公司_AR增强现实_AR工业_AR巡检|上海集英科技 | 学考网学历中心| 房屋质量检测-厂房抗震鉴定-玻璃幕墙检测-房屋安全鉴定机构 | 北京普辉律师事务所官网_北京律师24小时免费咨询|法律咨询 | 洛阳永磁工业大吊扇研发生产-工厂通风降温解决方案提供商-中实洛阳环境科技有限公司 | 超声波清洗机-超声波清洗设备定制生产厂家 - 深圳市冠博科技实业有限公司 | 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 飞行者联盟-飞机模拟机_无人机_低空经济_航空技术交流平台 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 礼堂椅厂家|佛山市艺典家具有限公司| ★塑料拖链__工程拖链__电缆拖链__钢制拖链 - 【上海闵彬】 | 杭州网络公司_百度SEO优化-外贸网络推广_抖音小程序开发-杭州乐软科技有限公司 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 能量回馈_制动单元_电梯节能_能耗制动_深圳市合兴加能科技有限公司 | 导电银胶_LED封装导电银胶_半导体封装导电胶厂家-上海腾烁 | 不锈钢发酵罐_水果酒发酵罐_谷物发酵罐_山东誉诚不锈钢制品有限公司 | 山东氧化铁红,山东铁红-淄博科瑞化工有限公司 | 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | 代写标书-专业代做标书-商业计划书代写「深圳卓越创兴公司」 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 九州网址_专注于提供网址大全分享推广中文网站导航服务 | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | 阴离子聚丙烯酰胺价格_PAM_高分子聚丙烯酰胺厂家-河南泰航净水材料有限公司 |