原生js实现的观察者和订阅者模式简单示例
网络编程 2021-07-04 15:02www.168986.cn编程入门
这篇文章主要介绍了原生js实现的观察者和订阅者模式,结合简单实例形式分析了js观察者和订阅者模式的相关原理与实现技巧,需要的朋友可以参考下
本文实例讲述了原生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> ); } } // ponentDidUpdate 与 render 方法与上例一致 class Child_1 extends Component{ ponentDidMount() { setTimeout(() => { // 发布 msg 事件 console.log(eventProxy) eventProxy.trigger('msg', 'end','lll'); }, 5000); } render() { return ( <div>我是组件一</div> ) } } // ponentDidUpdate 方法与上例一致 class Child_2 extends Component{ state = { msg: 'start' }; ponentDidMount() { // 监听 msg 事件 eventProxy.on('msg', (msg,mm) => { console.log(msg,mm) this.setState({ msg:msg }); }); } render() { return <div> <p>child_2 ponent: {this.state.msg}</p> </div> } }
参考淘宝前端团队技术库
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具测试上述代码运行效果。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》及《》
希望本文所述对大家JavaScript程序设计有所帮助。
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南