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 常用操作代码
Mar 14 Javascript
JavaScript 面向对象编程(2) 定义类
May 18 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
Jun 23 Javascript
网页中CDATA标记的说明
Sep 12 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
Oct 16 Javascript
Egret引擎开发指南之视觉编程
Sep 03 Javascript
js 自带的sort() 方法全面了解
Aug 16 Javascript
移动端使用localResizeIMG4压缩图片
Apr 22 Javascript
基于 Vue 的树形选择组件的示例代码
Aug 18 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
Dec 22 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
May 28 Javascript
Vue结合路由配置递归实现菜单栏功能
Jun 16 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
PHP 透明水印生成代码
2012/08/27 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
Cookie跨域问题解决方案代码示例
2020/11/24 PHP
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
js触发asp.net的Button的Onclick事件应用
2013/02/02 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
jqgrid 表格数据导出实例
2013/11/21 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
[01:46]新英雄登场
2019/09/10 DOTA
简单解决Python文件中文编码问题
2015/11/22 Python
python类的继承实例详解
2017/03/30 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
python用requests实现http请求代码实例
2019/10/31 Python
python实现门限回归方式
2020/02/29 Python
带你学习Python如何实现回归树模型
2020/07/16 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
火车的故事教学反思
2014/02/11 职场文书
基督教婚礼主持词
2014/03/14 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
五年级上册复习计划
2015/01/19 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书