观察者模式是前端事件驱动编程的核心,它通过被观察者在状态变化时通知观察者实现松耦合通信;J*aScript的DOM事件、自定义事件及事件循环机制均基于此模式实现异步回调与跨组件通信。

观察者模式是前端开发中非常核心的设计模式之一,J*aScript 的事件系统正是基于这种模式实现的。它让对象之间可以松耦合地通信:一个对象(被观察者)在状态改变时通知所有依赖它的对象(观察者),而无需知道这些观察者是谁。
观察者模式包含两个主要角色:
下面是一个简单的手动实现:
class Subject {
constructor() {
this.observers = [];
}
addObserver(observer) {
this.observers.push(observer);
}
removeObserver(observer) {
this.observers = this.observers.filter(obs => obs !== observer);
}
notify(data) {
this.observers.forEach(observer => observer.update(data));
}
}
class Observer {
constructor(name) {
this.name = name;
}
update(data) {
console.log(`${this.name} received:`, data);
}
}
// 使用示例
const subject = new Subject();
const obs1 = new Observer('Observer 1');
const obs2 = new Observer('Observer 2');
subject.addObserver(obs1);
subject.addObserver(obs2);
subject.notify('Hello from subject!');
浏览器的事件机制是观察者模式的典型应用。DOM 元素作为被观察者,事件监听函数就是观察者。
通过 addEventListener 添加监听,相当于注册观察者;事件触发时,浏览器自动调用回调函数,完成通知过程。
const button = document.getElementById('myButton');
button.addEventListener('click', function() {
console.log('Button was clicked!');
});
// 点击按钮后,回调函数被调用 —— 观察者收到通知
这种设计让 UI 行为与逻辑解耦,开发者无需轮询按钮状态,只需“订阅”感兴趣的事件即可。
除了 DOM 事件,J*aScript 还支持创建自定义事件,用于模块或组件间的通信。
Decktopus AI
AI在线生成高质量演示文稿
153
查看详情
利用 EventTarget 或 CustomEvent 可以轻松构建发布-订阅系统。
// 创建一个可绑定事件的对象
const eventBus = new EventTarget();
// 监听自定义事件
eventBus.addEventListener('dataReady', (e) => {
console.log('Data received:', e.detail);
});
// 分发事件
const event = new CustomEvent('dataReady', { detail: 'Some data' });
eventBus.dispatch(event);
这种方式在复杂应用中常用于非父子组件通信,避免层层传递 props。
J*aScript 的事件系统还与事件循环紧密结合。用户交互、定时器、网络请求等都会生成事件,推入任务队列,由事件循环在适当时机执行回调。
例如:
setTimeout(() => {
console.log('Timeout callback executed');
}, 0);
console.log('Sync code runs first');
尽管延时为 0,回调仍会在当前执行栈清空后才被调用,体现了观察者模式在异步环境下的延迟通知特性。
基本上就这些。理解观察者模式有助于掌握事件驱动编程的本质,无论是处理用户交互、实现状态管理,还是构建响应式系统,都是基础能力。
以上就是J*aScript观察者模式_j*ascript事件系统的详细内容,更多请关注其它相关文章!
# java
# 关键词排名推广服务商
# 会在
# 只需
# 扁平化
# 是一个
# 都是
# 服务端
# 源代码
# 有什么
# 回调
# ai
# 栈
# 前端开发
# 回调函数
# 浏览器
# 前端
# javascript
# 自定义
# 相城网站建设销售
# 南京抖音seo正规公司
# 沈阳网站推广方案
# 盐田科技网站建设
# seo58短视频
# 河北威力网站建设
# 织金seo网站优化
# seo创作网站
# 抚顺seo排名加盟
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
使用VS Code调试Python代码:从入门到精通
Python定时发送QQ消息
虫虫助手如何更新游戏
《三角洲行动》战斗步枪与机枪类改装代码分享
优化长HTML属性值:SonarQube警告与实用策略
《360浏览器》设置摄像头权限方法
谷歌浏览器官方镜像获取方法_谷歌浏览器网页版入口极速直达
谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法
PyEZ 配置提交中 RpcTimeoutError 的健壮性处理策略
之了课堂app做题入口
Dash应用多值文本输入处理与类型转换教程
如何测试您的网站全球打开速度-网站海外测速工
《绝区零》2.3前瞻|直播|内容介绍
Win10截图远程协助 Win10远程桌面截屏法【场景应用】
C#解析来自网络的XML流数据 实时错误处理与重试机制
Google Drive API 认证:服务账户与OAuth 2.0的选择与实践
Excel如何快速找到并断开外部数据源链接_Excel外部数据源断开方法
抖音号显示企业机构号是什么意思?企业机构号申请条件是什么?
告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名
《杖剑传说》食谱大全
OTT月报 | 2025年9月智能电视大数据报告
QQ网站入口直接登录 QQ官方正版登录页面
《淘票票》添加到苹果钱包教程
知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法
B站怎么快速升级 B站用户等级提升攻略【详解】
鲨鱼剧场app金币获取方法
composer licenses 命令:如何检查项目依赖的许可证?
大众点评了却看不到是怎么回事
圆通快递官方入口不需要登录 在线查询入口快速查询
Golang如何使用log记录日志信息_Golang log日志记录方法总结
Sublime怎么快速复制文件路径_Sublime右键菜单增强技巧
mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法
悟空浏览器如何恢复关闭的标签页 悟空浏览器撤销关闭网页快捷键设置
虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画
智慧职教mooc平台登录网址 智慧职教mooc官网直达
《宝可梦大集结》S4冠军之路开始时间介绍
Animex动漫社社登录官网 Animex动漫社资源社入口直达
《健康大兴》注册方法介绍
PSD转AI文件的简单方法
《崩坏:星穹铁道》3.6版本异相仲裁打法及配队推荐
《磁力猫》最好用的磁官网
深入理解J*aScript异步操作:setTimeout与调用栈的真相
照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程
Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程
汽水音乐网页版登录 汽水音乐网页端官方入口
Win10输入法不见了怎么办 Win10找回语言栏图标教程
c++类和对象到底是什么_c++面向对象编程基础
QQ邮箱官方登录页_腾讯出品安全稳定的邮箱服务
电子白板帮助菜单使用指南
Golang中的rune与byte类型区别是什么_Golang字符与字节处理详解
2025-12-03
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。