js 发布订阅模式的实例讲解


Posted in Javascript onSeptember 10, 2017

废话不多说,直接上代码

//发布订阅模式
class EventEmiter{
  constructor(){
    //维护一个对象
    this._events={

    }
  }
  on(eventName,callback){
    if( this._events[eventName]){
      //如果有就放一个新的
      this._events[eventName].push(callback);
    }else{
      //如果没有就创建一个数组
      this._events[eventName]=[callback]
    }
  }
  emit(eventName,...rest){
    if(this._events[eventName]){ //循环一次执行
      this._events[eventName].forEach((item)=>{
        item.apply(this,rest)
      });
    }
  }
  removeListener(eventName,callback){
    if(this._events[eventName]){
      //当前数组和传递过来的callback相等则移除掉
      this._events[eventName]=
        this._events[eventName].filter(item=>item!==callback);
    }
  }
  once(eventName,callback){
    function one(){
      //在one函数运行原来的函数,只有将one清空
      callback.apply(this,arguments);
      //先绑定 执行后再删除
      this.removeListener(eventName,one);
    }
    this.on(eventName,one);
      //此时emit触发会执行此函数,会给这个函数传递rest参数
  }
}
class Man extends EventEmiter{}
let man=new Man()
function findGirl() {
  console.log('找新的女朋友')
}
function saveMoney() {
  console.log('省钱')
}
man.once('失恋',findGirl);
//man.on('失恋',findGirl) //失恋 ,绑定一个函数方法
man.on('失恋',saveMoney)//失恋 ,绑定一个函数方法
man.removeListener('失恋',saveMoney); //移除一个函数方法
man.emit('失恋');
//绑定一次,触发多次,也只执行一次。触发后一次将数组中的哪一项删除掉下次触发就不会执行

以上这篇js 发布订阅模式的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS backgroundImage控制
May 19 Javascript
JavaScript window.setTimeout() 的详细用法
Nov 04 Javascript
ASP中Sub和Function的区别说明
Aug 30 Javascript
JQuery中对Select的option项的添加、删除、取值
Aug 25 Javascript
jquery+ajax验证不通过也提交表单问题处理
Dec 12 Javascript
基于javascript实现图片懒加载
Jan 05 Javascript
JavaScript实现图片瀑布流和底部刷新
Jan 02 Javascript
使用jQuery实现动态添加小广告
Jul 11 jQuery
jQuery+ajax读取json数据并按照价格排序示例
Mar 28 jQuery
自定义vue组件发布到npm的方法
May 09 Javascript
es6中new.target的作用和使用场景简单示例分析
Mar 14 Javascript
js实现鼠标拖曳效果
Dec 30 Javascript
node.js 发布订阅模式的实例
Sep 10 #Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
Sep 10 #Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
Sep 10 #Javascript
基于AngularJS的简单使用详解
Sep 10 #Javascript
JS获取字符对应的ASCII码实例
Sep 10 #Javascript
Angular4学习笔记之根模块与Ng模块
Sep 09 #Javascript
关于vue-router的beforeEach无限循环的问题解决
Sep 09 #Javascript
You might like
基于文本的留言簿
2006/10/09 PHP
深入解析PHP中逗号与点号的区别
2013/08/05 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
javascript 鼠标拖动图标技术
2010/02/07 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
JS获取农历日期具体实例
2013/11/14 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
[01:13]DOTA2群星解读国服召集令 一起说出回归的理由
2013/07/17 DOTA
详解Python的Django框架中的模版继承
2015/07/16 Python
python开发之str.format()用法实例分析
2016/02/22 Python
Python reduce()函数的用法小结
2017/11/15 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
python实现简单图片物体标注工具
2019/03/18 Python
python编写简单端口扫描器
2019/09/04 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
10张动图学会python循环与递归问题
2021/02/06 Python
医学院毕业生自荐信
2013/11/08 职场文书
父亲生日宴会答谢词
2014/01/10 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
OpenCV-Python实现油画效果的实例
2021/06/08 Python
Spring Security使用单点登录的权限功能
2022/04/03 Java/Android
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android