JavaScript设计模式之发布-订阅模式

发布者和订阅者完全解耦(通过消息队列进行通信)
在这里插入图片描述
适用场景:功能模块间进行通信,如Vue的事件总线。
ES6实现方式:

class eventManager {constructor() {this.eventList = {};}on(eventName, callback) {if (this.eventList[eventName]) {this.eventList[eventName].push(callback);} else {this.eventList[eventName] = [callback];}}fire(eventName, data) {if (eventName in this.eventList &&Array.isArray(this.eventList[eventName])) {this.eventList[eventName].forEach(callback => callback(data));} else {console.log(`${eventName} is not a resgisted event`);}}off(eventName, callback) {if (callback) {if (eventName in this.eventList &&Array.isArray(this.eventList[eventName])) {let index = this.eventList[eventName].indexOf(callback);index > -1 && this.eventList[eventName].splice(index, 1);} else {console.log(`${eventName} has not been listen`);}} else {delete this.eventList[eventName]}}
}
let eventManager1 = new eventManager();
eventManager1.on("event", data => {console.log(data);
});
eventManager1.fire("event", "haha");
eventManager1.off("event");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/159742.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

块级作用域的理解

块级作用于的概念 由一对花括号{}中的语句集都属于一个块,在这个{}里面包含的块内定义的所有变量在代码块外都是不可见的,因此称为块级作用域。 作用域永远都是任何一门语言的重中之中,因为它控制着变量和参数的可见性和生命周期。讲到这里&…

搭建第一个区块链网络与一键部署WeBASE步骤

官网 搭建第一个区块链网络 — FISCO BCOS v2 v2.9.0 文档 (fisco-bcos-documentation.readthedocs.io) 一键部署 — WeBASE v1.5.5 文档 (webasedoc.readthedocs.io) 步骤 默认如MySQL、Python、java等依赖已经引入 1.创建操作目录, 下载安装脚本 创建操作目录 cd ~ &a…

​实现1个电脑打开多个微信​

实现1个电脑打开多个微信:1、快速双击打开微信,可打开多个微信。2、按住回车键,双击打开微信,并快速放开回车键即可打开多个微信。3、用命令符也可打开多个微信。4、建立一个批处理文件实现打开多个微信。 方法一:最简…

故障诊断模型 | Maltab实现SVM支持向量机的故障诊断

效果一览 文章概述 故障诊断模型 | Maltab实现SVM支持向量机的故障诊断 模型描述 Chinese: Options:可用的选项即表示的涵义如下   -s svm类型:SVM设置类型(默认0)   0 – C-SVC   1 --v-SVC   2 – 一类SVM   3 – e -SVR   4 – v-SVR   -t 核函数类型:核函…

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境

CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境 文章目录 CoDeSys系列-4、基于Ubuntu的codesys运行时扩展包搭建Profinet主从环境一、前言二、资料收集三、Ubuntu18.04从安装到更换实时内核1、下载安装Ubuntu18.042、下载安装实时内核,解决编…

如何卸载干净 IDEA(图文讲解)windows和Mac教程

大家好,我是sun~ 很多小伙伴会问 Windows / Mac 系统上要怎么彻底卸载 IDEA 呢? 本文通过图片文字,详细讲解具体步骤: 如何卸载干净 IDEA(图文讲解) Windows1、卸载 IDEA 程序2、注册表清理3、残留清理 M…

Openssl生成证书-nginx使用ssl

Openssl生成证书并用nginx使用 安装openssl yum install openssl -y创库目录存放证书 mkdir /etc/nginx/cert cd /etc/nginx/cert配置本地解析 cat >>/etc/hosts << EOF 10.10.10.21 kubernetes-master.com EOF10.10.10.21 主机ip、 kubernetes-master.com 本…

Android各版本对应的SDK及JDK版本要求

1、Android Gradle 插件版本说明 | Android 开发者 | Android Developers 2、 3、Android Gradle 插件 7.3.0&#xff08;2022 年 9 月&#xff09; | Android 开发者 | Android Developers 4、 5、参考 Android中Gradle版本和Gradle插件版本 - 简书

QCC TX 音频输入切换+提示声音

QCC TX 音频输入切换提示声音 QCC蓝牙芯片&#xff08;QCC3040 QCC3056 等等&#xff09;&#xff0c;AUX、I2S、USB输入 蓝牙音频输入&#xff0c;模拟输出是最常见的方式。 也可以再此基础上动态切换输入方式。 针对TX切换EQ,调节音量不能出提示声音问题&#xff0c;可以增…

路由器基础(八):策略路由配置

在实际网络应用中&#xff0c;策略路由也是一种重要的技术手段。尽管 在考试并不注重策略路由&#xff0c;但是实际上应用较多&#xff0c;建议考生除了掌握基本的静态路由协议IP route-static, 动态路由协议RIP 、OSPF的基础配置外&#xff0c;还要掌握如何配置策略路由。…

解决ECharts柱形图自定义单个柱子颜色图例无法显示

legend里data和series里的name需要对应series里对象需要设置stack属性&#xff0c;属性值都一样即可显示单柱重点在于series里对象data属性设置&#xff0c;必须使用&#xff0c;否则影响柱体上数值显示tooltip的值需要自定义&#xff0c;否则会显示堆叠柱状图的tooltip格式&am…

Java Web 学习笔记(二) —— JDBC

目录 1 JDBC 概述2 JDBC 快速入门3 JDBC API 详解3.1 DriverManager3.2 Connection3.3 Statement3.4 ResultSet3.5 PreparedStatement3.5.1 代码模拟 SQL 注入3.5.2 PreparedStatement 的使用3.5.3 PreparedStatement 原理 4 数据库连接池4.1 数据库连接池概述4.2 数据库连接池…