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 相关文章推荐
JQuery模板插件 jquery.tmpl 动态ajax扩展
Nov 10 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
Dec 25 Javascript
基于jQuery实现下拉框
Nov 24 Javascript
超级简单的jquery操作表格方法
Dec 15 Javascript
js获取微信版本号的方法
May 12 Javascript
javascript中的正则表达式使用详解
Aug 30 Javascript
Javascript中内建函数reduce的应用详解
Oct 20 Javascript
基于jQuery制作小图标上下滑动特效
Jan 18 Javascript
JS实现简单拖拽效果
Jun 21 Javascript
vue-router命名视图的使用讲解
Jan 19 Javascript
JavaScript执行机制详细介绍
Dec 06 Javascript
vue实现书本翻页动画效果实例详解
Apr 08 Vue.js
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
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
jQuery入门知识简介
2010/03/04 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
js控制页面的全屏展示和退出全屏显示的方法
2015/03/10 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
2016/12/18 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
python中cPickle类使用方法详解
2018/08/27 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
2019/03/26 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
如何理解Python中的变量
2020/06/01 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
个人自我剖析材料
2014/02/07 职场文书
农业开发项目建议书
2014/05/16 职场文书
师范毕业生求职信
2014/07/11 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
pandas中pd.groupby()的用法详解
2022/06/16 Python
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript