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,超强推荐share.js
Dec 23 Javascript
Javascript Tab 导航插件 (23个)
Jun 11 Javascript
jQuery中filter(),not(),split()使用方法
Jul 06 Javascript
JavaScript中的property和attribute介绍
Dec 26 Javascript
jquery实现智能感知连接外网搜索
May 21 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
Nov 02 Javascript
jQuery实现简单的点赞效果
May 29 Javascript
Bootstrap学习笔记之js组件(4)
Jun 12 Javascript
js获取腾讯视频ID的方法
Oct 03 Javascript
javascript  数组排序与对象排序的实例
Jul 17 Javascript
本地搭建微信小程序服务器的实现方法
Oct 27 Javascript
angular 实现同步验证器跨字段验证的方法
Apr 11 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 调用远程url的六种方法小结
2009/11/02 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
javascript 动态生成私有变量访问器
2009/12/06 Javascript
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
layui使用label标签的方法
2019/09/14 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
使用python装饰器验证配置文件示例
2014/02/24 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
Python微信公众号开发平台
2018/01/25 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
Python之字典添加元素的几种方法
2020/09/30 Python
产品销售员岗位职责
2013/12/18 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书