js设计模式:发布订阅模式

作用:

也称之为消息队列模式,或者pubsub模式

发布者发布消息(也可以理解为调用某函数),订阅者会收到消息,并且发布者可以将一些参数传递给订阅者。

是一种常用的参数传递方法,经典的pubsub.js,vue2中的$bus等都是用的这种模式。

示例:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>发布订阅模式</title>
</head><body><button  onClick='subYou_vue()'>订阅尤大的vue技术专栏</button><button  onClick='subYou_vite()'>订阅尤大的vite技术专栏</button><button  onClick='cancelSubYou_vite()'>取消订阅尤大的vite技术专栏</button><hr><button  onClick='pushVueBlog()'>尤大发vue技术贴</button><button  onClick='pushViteBlog()'>尤大发vite技术贴</button><script>const Youyuxi = {blogMsg: {},//添加了某条订阅内容及后续需要处理的操作addSuber: (msg, callBack) => {if (!Youyuxi.blogMsg[msg]) {Youyuxi.blogMsg[msg] = []}Youyuxi.blogMsg[msg].push(callBack)},publishMsg: (msg, data) => {if (Youyuxi.blogMsg[msg]) {Youyuxi.blogMsg[msg].forEach(item => {item(msg, data)})}},deleteSuber:(msg)=>{if(Youyuxi.blogMsg[msg]){Youyuxi.blogMsg[msg] = null}}}const wjt = {getMsgHandler: (type, data) => {switch (type) {case 'vueBlogs':console.log('尤大发了一篇vue技术帖子,内容为' + data)breakcase 'viteBlogs':console.log('尤大发了一篇vite技术帖子,内容为' + data)break}},subYouyuxi: (title) => {Youyuxi.addSuber(title, wjt.getMsgHandler)},cancelViteBlog:(title)=>{Youyuxi.deleteSuber(title)}}//订阅尤大的vue技术栏const subYou_vue = () => {wjt.subYouyuxi('vueBlogs')}//订阅尤大的vite技术栏const subYou_vite = () => {wjt.subYouyuxi('viteBlogs')}//尤大发博客了const pushVueBlog = () => {Youyuxi.publishMsg('vueBlogs', '这是一篇vue3响应式原理的技术帖子')}const pushViteBlog = () => {Youyuxi.publishMsg('viteBlogs', '这是一篇vite构建原理的技术帖子')}const cancelSubYou_vite = ()=>{wjt.cancelViteBlog('viteBlogs')}</script>
</body></html>

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

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

相关文章

模仿 STM32 驱动开发格式实验

1.模仿 STM32 寄存器定义 为了开发方便&#xff0c; ST 官方为 STM32F103 编写了一个叫做 stm32f10x.h 的文件&#xff0c;在这个文件 里面定义了 STM32F103 所有外设寄存器&#xff0c;我们可以使用其定义的寄存器来进行开发&#xff0c;比如我 们可以用如下代码来初始…

kube-ovn默认vpc

下面图是kube-ovn默认vpc的拓扑 默认vpc kube-ovn安装完成后会自带一个默认vpc是ovn-cluster&#xff0c;并且会在这个默认vpc下创建ovn-default子网、join子网&#xff0c; 默认子网 ovn-default是ovn-cluster下的默认子网&#xff0c;在创建pod时没有指定子网时会使用这个…

Python编程中的异常处理

什么是异常&#xff1f; 程序错误&#xff08;errors&#xff09;有时也被称为程序异常&#xff08;exceptions&#xff09;&#xff0c;这是每个编程人员都会经常遇到的问题。在过去&#xff0c;当遇到这类情况时&#xff0c;程序会终止执行并显示错误信息&#xff0c;通常是…

JAVA之Java线程核心详解

Java线程核心 1.进程和线程 进程&#xff1a;进程的本质是一个正在执行的程序&#xff0c;程序运行时系统会创建一个进程&#xff0c;并且给每个进程分配独立的内存地址空间保证每个进程地址不会相互干扰。同时&#xff0c;在 CPU 对进程做时间片的切换时&#xff0c;保证进程…

QT安装-多版本

下载下载器 Qt开发技巧之快速安装多版本Qt_qt安装多版本-CSDN博客 无法下载存档bug-更换镜像源 windows安装QT时出现“无法下载存档……”解决办法 - lmore - 博客园 (cnblogs.com)

微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用

&#x1f3f7;️个人主页&#xff1a;鼠鼠我捏&#xff0c;要死了捏的主页 &#x1f3f7;️系列专栏&#xff1a;Golang全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

探索ES6:JavaScript的下一代标准

文章目录 探索ES6&#xff1a;JavaScript的下一代标准1. let 和 const2. Arrow Functions&#xff08;箭头函数&#xff09;3. 模板字符串4. 解构赋值5. 类和模块 探索ES6&#xff1a;JavaScript的下一代标准 ES6&#xff0c;也称为ECMAScript 2015&#xff0c;是JavaScript的…

穿越网络迷雾:OSI网络层的全面探索与未来展望

1. 网络层的基本概念和功能 OSI&#xff08;开放式系统互连&#xff09;模型的网络层位于第三层&#xff0c;主要负责在多个网络间转发数据包&#xff0c;确保数据能够从源头到达目的地。网络层的基本功能包括&#xff1a; 路由选择 &#xff1a;确定数据从源到目的地的路径。…

猫头虎博客分享:深入解析 Visual Studio Code 1.86 版本新特性

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

测试文章笔记-SQL3种优化方法

SQL语句优化&#xff1a; 本质&#xff1a;降低执行时间 **核心思路&#xff1a;**找到执行计划中开销较高的操作&#xff0c;改写SQL语句或改变表访问方式调整执行计划。 举例&#xff1a; 1.使用索引替代全表扫描&#xff08;索引&#xff1a;是帮助MysQL高效获取数据的数…

【JVM】打破双亲委派机制

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;JVM ⛺️稳中求进&#xff0c;晒太阳 打破双亲委派机制 打破双亲委派机制三种方法 自定义类加载器 ClassLoader包含了四个核心方法 //由类加载器子类实现&#xff0c;获取二进制数据调用…

MySQL之json数据操作

1 MySQL之JSON数据 总所周知&#xff0c;mysql5.7以上提供了一种新的字段格式json&#xff0c;大概是mysql想把非关系型和关系型数据库一口通吃&#xff0c;所以推出了这种非常好用的格式&#xff0c;这样&#xff0c;我们的很多基于mongoDB的业务都可以用mysql去实现了。当然…

NumPy模块完结篇:深入探讨和高效利用【第85篇—NumPy模块】

NumPy模块完结篇&#xff1a;深入探讨和高效利用 NumPy是Python中用于科学计算的核心库之一&#xff0c;提供了高性能的多维数组对象&#xff08;numpy.ndarray&#xff09;以及许多用于操作这些数组的函数。在前面的几篇博客中&#xff0c;我们介绍了NumPy的基础知识、数组操…

19 OpenGL计算着色器

计算着色器 Compute Shaders 除了面向图形的着色操作&#xff0c;例如顶点着色、曲面细分、几何着色和片段着色之外&#xff0c;OpenGL还可以通过使用计算着色器进行通用计算。计算管线是一种执行通用着色器的单阶段机器形式。计算着色器按照第7.1节描述的方式创建&#xff0c…

go-zero读取mysql部分字段

读取部分字段&#xff0c;使用函数 QueryRowPartialCtx 。 假设有如下一张表&#xff1a; CREATE TABLE test (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, ctime DATETIME);要读取字段 ctime 值。 定义一结构体&#xff1a; type X struct {state int db:"…

电子商务跨境电商大数据的关键技术之—主流电商大数据采集

大数据采集是指通过各种技术手段和工具收集、获取和提取大规模数据的过程。在信息时代&#xff0c;各种互联网、物联网、移动设备等的普及和应用&#xff0c;产生了海量的数据&#xff0c;这些数据被称为大数据。大数据采集就是对这些数据进行收集和抓取&#xff0c;以获得有意…

手把手一起开发SV4E-I3C设备(二)

JEDEC DDR5 SPD Hub Devices例程 DDR5生态系统的核心是SidebandBus Protocol 参考下图&#xff0c;可以将SV4E-I3C的端口1声明为主服务器(模拟主机控制器)&#xff0c;并且它可以属于SV4E-I3C上的一个总线。端口2可以作为SPD Hub DUT的Local Bus侧的从站连接。这个从站可以被…

12(S)-HETE ELISA kit--灵敏的ELISA试剂盒

灵敏的ELISA试剂盒&#xff0c;能够检测任何物种的培养上清液和血浆中的12(S)-HETE HETE是由脂氧合酶代谢花生四烯酸产生的副产物。12(S)-HETE是12(S)-氢过氧四烯酸&#xff08;12(S)-HpETE&#xff09;还原的立体特异性羟基产物&#xff0c;其本身是花生四烯酸的12-脂氧酶代谢…

23年秋招结束,同学们陆陆续续拿到心仪的offer!24年秋招出发!

续接上次上岸同学的分享&#xff1a;还在担心秋招吗&#xff1f;看看24届已上岸同学的经验分享&#xff01; 秋招的时间过程相同&#xff0c;但经历却各不相同。学历、专业似乎都影响着同学们的面试经历和感受。校招的面试毫无疑问学历的加持是巨大的优势&#xff0c;学历好会…

精通嵌入式开发:实战与案例分析

精通嵌入式开发需要深入理解嵌入式系统的原理和技术&#xff0c;并通过实战和案例分析来提升实际应用能力。以下是关于精通嵌入式开发的实战与案例分析的小点论述&#xff1a; 1.掌握嵌入式系统原理 需要深入学习嵌入式系统的基本原理&#xff0c;包括处理器架构、嵌入式操作系…