JavaScript事件发布/订阅模式原理与用法分析


Posted in Javascript onAugust 21, 2018

本文实例讲述了JavaScript事件发布/订阅模式原理与用法。分享给大家供大家参考,具体如下:

1、发布/订阅模式也是诸多设计模式当中的一种;

2、这种方式可以在es5下相当优雅地处理异步操作;

3、什么是发布/订阅呢?我们举个栗子:

假设fn1,fn2,fn3都可以视作一个事件的发布者,执行它,就会发布一个事件。这个时候,我们可以通过一个事件的订阅者去批量订阅并处理这些事件,包括它们的先后顺序。增加一个消息订阅者的方法:

class AsyncFunArr {
 constructor (...arr) {
  this.funcArr = [...arr]
 }
 next () {
  const fn = this.funcArr.shift()
  if (typeof fn === 'function') fn()
 }
 run () {
  this.next()
 }
}

4、调用

//首先将fn1,fn2,fn3订阅
const asyncFunArr = new AsyncFunArr(fn1, fn2, fn3)
//fn1,fn2,fn3作为分布者分别调用其next()方法:
function fn1 () {
 console.log('Function 1')
 asyncFunArr.next()
}
function fn2 () {
 setTimeout(() => {
  console.log('Function 2')
  asyncFunArr.next()
 }, 500)
}
function fn3 () {
 console.log('Function 3')
 asyncFunArr.next()
}

5、输出:

// Function 1
// Function 2
// Function 3

6、总结:

通过上述方法,可以实现很多,如异步请求数据等。

7、参考资料:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/constructor

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
在html页面上拖放移动标签
Jan 08 Javascript
js 遍历对象的属性的代码
Dec 29 Javascript
DOM节点深度克隆函数cloneNode()用法实例
Jan 12 Javascript
javascript文件加载管理简单实现方法
Jul 25 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
Aug 25 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
Jun 02 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
Dec 13 Javascript
JS去除字符串中空格的方法
Feb 14 Javascript
Javascript实现base64的加密解密方法示例
Jun 27 Javascript
Vue.js 父子组件通信的十种方式
Oct 30 Javascript
javascript异常处理实现原理详解
Feb 17 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
Jul 17 Javascript
javascript和php使用ajax通信传递JSON的实例
Aug 21 #Javascript
小程序开发基础之view视图容器
Aug 21 #Javascript
详解微信小程序的 request 封装示例
Aug 21 #Javascript
Mint-UI时间组件起始时间问题及时间插件使用
Aug 20 #Javascript
vue监听对象及对象属性问题
Aug 20 #Javascript
微信小程序中使用自定义图标(阿里icon)的方法
Aug 20 #Javascript
Vue插件打包与发布的方法示例
Aug 20 #Javascript
You might like
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
学习ExtJS TextField常用方法
2009/10/07 Javascript
JS解析XML的实现代码
2009/11/12 Javascript
js null,undefined,字符串小结
2010/08/21 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
Python with的用法
2014/08/22 Python
Python中的os.path路径模块中的操作方法总结
2016/07/07 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
小学教师学期末自我评价
2013/09/25 职场文书
中队活动总结
2014/08/27 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
单位未婚证明范本
2014/11/25 职场文书
出租车拒载检讨书
2015/01/28 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
中标通知书
2015/04/17 职场文书
投诉书范文
2015/07/02 职场文书