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 相关文章推荐
无语,javascript居然支持中文(unicode)编程!
Apr 12 Javascript
Extjs 几个方法的讨论
Jan 28 Javascript
基于datagrid框架的查询
Apr 08 Javascript
JS.findElementById()使用介绍
Sep 21 Javascript
JavaScript编码风格指南(中文版)
Aug 26 Javascript
angular ngClick阻止冒泡使用默认行为的方法
Nov 03 Javascript
通过示例彻底搞懂js闭包
Aug 10 Javascript
vue渲染时闪烁{{}}的问题及解决方法
Mar 28 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
Mar 13 Javascript
Vue的props父传子的示例代码
May 20 Javascript
浅谈vue.watch的触发条件是什么
Nov 07 Javascript
echarts浮动显示单位的实现方法示例
Dec 04 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
AM/FM收音机的安装与调试
2021/03/02 无线电
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
用php+mysql一个名片库程序
2006/10/09 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
joomla数据库操作示例代码
2016/01/06 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
10款最好的Web开发的 Python 框架
2015/03/18 Python
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
从零开始学Python第八周:详解网络编程基础(socket)
2016/12/14 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
Pytorch之Variable的用法
2019/12/31 Python
Python random模块的使用示例
2020/10/10 Python
Matplotlib中rcParams使用方法
2021/01/05 Python
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
如何写你的创业计划书
2014/01/07 职场文书
宠物店的创业计划书范文
2014/01/11 职场文书
金融行业职业生涯规划范文
2014/01/17 职场文书
幼儿园门卫制度
2014/01/29 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
2015年行政部工作总结
2015/04/28 职场文书
2015年法务工作总结范文
2015/05/23 职场文书