讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Laper
Laper

剧本策划到成片协作

剧云
剧云

中文短剧剧本制作平台

使用JavaScript实现一个简单的发布订阅模式_js设计模式

雨静君_7811

雨静君_7811

发布时间:2025-11-10 21:13:16

|

398人浏览过

|

来源于php中文网

原创

发布订阅模式通过EventEmitter类实现事件的监听与触发,核心是维护事件名与回调函数的映射表;支持on订阅、emit发布、off取消订阅;同一事件可绑定多个回调,解耦事件发送者与接收者,适用于组件通信和状态通知等场景。

使用javascript实现一个简单的发布订阅模式_js设计模式

发布订阅模式是一种常见的设计模式,常用于解耦事件的发送者和接收者。在JavaScript中,这种模式特别适合处理组件间的通信、事件管理等场景。下面是一个简单但实用的发布订阅模式实现。

创建一个EventEmitter类

核心是维护一个事件名称与回调函数的映射表。通过on监听事件,emit触发事件,off移除监听。

cn-json-diff
cn-json-diff

比较两个 JSON 文件并显示差异。支持嵌套结构、数组及值变更。纯 Python 标准库实现,无需 API 密钥。

下载
class EventEmitter { constructor() { this.events = {}; } // 订阅事件 on(eventName, callback) { if (!this.events[eventName]) { this.events[eventName] = []; } this.events[eventName].push(callback); } // 发布事件(触发) emit(eventName, data) { if (this.events[eventName]) { this.events[eventName].forEach(callback => callback(data)); } } // 取消订阅 off(eventName, callback) { if (!this.events[eventName]) return; const updatedCallbacks = this.events[eventName].filter(cb => cb !== callback); this.events[eventName] = updatedCallbacks; } }

使用示例

定义一个事件中心实例,然后注册监听并触发事件。

// 创建实例 const eventBus = new EventEmitter(); // 监听用户登录事件 eventBus.on('login', (user) => { console.log(`欢迎 ${user.name} 登录`); }); eventBus.on('login', (user) => { console.log(`记录日志:${user.name} 在 ${new Date().toLocaleTimeString()} 登录`); }); // 触发登录事件 eventBus.emit('login', { name: 'Alice' }); // 移除某个监听(需保留引用) const greet = (user) => { console.log(`打招呼:${user.name}`); }; eventBus.on('login', greet); eventBus.off('login', greet); // 取消该监听

关键点说明

  • 事件名作为键:所有回调按事件名分类存储,便于查找和触发。
  • 支持多个监听器:同一个事件可以绑定多个不同的回调函数。
  • 传参灵活:emit时可传递任意数据给回调函数。
  • 解耦清晰:发布者无需知道谁订阅了事件,订阅者也不关心是谁发布的。
基本上就这些。这个简单的实现已经能满足大多数前端场景的需求,比如跨组件通信、状态变化通知等。不复杂但容易忽略的是保留回调引用以便正确取消订阅。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

838

2025.12.04

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2418

2023.09.20

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

4516

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

326

2025.12.06

console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

936

2023.08.08

console.log是什么
console.log是什么

console.log 是 javascript 函数,用于在浏览器控制台中输出信息,便于调试和故障排除。想了解更多console.log的相关内容,可以阅读本专题下面的文章。

6983

2024.05.29

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

40

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

20

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

20

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.5万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn