Vue 拦截监听原理

news/2025/1/24 13:22:30/

Vue 渐进式JavaScript 框架 学习笔记 - Vue 拦截监听原理

目录

拦截监听原理

如何跟踪变化

拦截监听示例

观察者

注意:vue3的变化

总结


拦截监听原理

如何跟踪变化

当你把一个普通的Javascript 对象传入 Vue 实例作为data选项,Vue 将遍历此对象所有的property,并使用 0bject.defineProperty 把这些 property 全部转为 getter/setter。0bject.defineProperty 是 ES5 中一个无法 shim 的特性,这也就是 vue 不支持 IE8 以及更低版本浏览器的原因。

这些 getter/setter对用户来说是不可见的,但是在内部它们让 vue 能够追踪依赖,在 property 被访问和修改时通知变更。这里需要注意的是不同浏览器在控制台打印数据对象时对 getter/setter 的格化并不同,所以建议安装 vue-devtools 来获取对检查数据更加友好的用户界面。

拦截监听示例

Vue对变量(状态)改变拦截监听的原理是利用Es5中一个方法。

示例如下:

javascript"><script>var obj = {};Object.defineProperty(obj, 'myname',{get() {console.log('访问了');},set() {console.log('修改了')}})
</script>

通过控制台访问和修改属性

Get set拦截,只要有人访问、有人修改就会被触发

帮你进行拦截值的改变,帮你调用dom修改对象值。

观察者

每个组件实例都对应一个 watcher 实例,它会在组件渲染的过程中把“接触”过的数据 property 记录为依赖。之后当依赖项的 setter 触发时,会通知 watcher,从而使它关联的组件重新渲染。

注意:vue3的变化

Object.defineProperty有以下缺点。

1、无法监听es6的Set、Map 变化;

2、无法监听Class类型的数据;

3、属性的新加或者删除也无法监听,

4、数组元素的增加和删除也无法监听。

针对Object.defineProperty的缺点,ES6 Proxy都能够完美得解决,它唯一的缺点就是,对IE不友好,所以vue3在检测到如果是使用IE的情况下(没错,IE11都不支持Proxy),会自动降级为Obiect.defineProperty的数据监听系统。

总结

Vue 渐进式JavaScript 框架 学习笔记 - Vue 拦截监听原理


http://www.ppmy.cn/news/1565792.html

相关文章

互联网产品品牌形象构建与开源AI智能名片S2B2C商城小程序的应用研究

摘要&#xff1a;随着互联网技术的飞速发展&#xff0c;互联网产品之间的竞争愈发激烈。为了在市场中占据一席之地&#xff0c;企业不仅需要提供高质量的产品和服务&#xff0c;还需要构建一个鲜明、有个性或统一的品牌形象&#xff0c;以增强用户的认知度和忠诚度。然而&#…

Grafana 统一可视化了,告警如何统一?

对于大部分公司&#xff0c;通常都不止一套监控、可观测性相关的系统&#xff0c;云上的、云下的&#xff0c;开源的、商业的&#xff0c;指标的、日志的、链路的&#xff0c;各个系统体验不同&#xff0c;权限难管&#xff0c;如何统一化并为各个团队赋能&#xff0c;是很多技…

LangGraph:基于图结构的智能系统开发与实践

一、背景知识 &#xff08;一&#xff09;人工智能发展趋势 随着人工智能技术的迅猛发展&#xff0c;我们正从简单的单一智能体模型向更加复杂的多智能体系统和知识表示结构演进。传统的人工智能系统在处理复杂任务和大规模数据时面临着诸多挑战&#xff0c;例如&#xff0c;…

算法题之栈与队列:理论基础与常用操作接口

栈与队列 &#xff08;1&#xff09;理论基础 栈&#xff1a;先进后出的数据结构 队列&#xff1a;先进先出的数据结构 栈提供push 和 pop 等等接口&#xff0c;所有元素必须符合先进后出规则&#xff0c;所以栈不提供走访功能&#xff0c;也不提供迭代器(iterator)。 不像是…

API接口技术:电商数据与反向海淘的桥梁

在数字经济蓬勃发展的今天&#xff0c;电商行业作为其中的重要一环&#xff0c;不断推动着商业模式的创新和变革。电商平台的涌现和消费者购物习惯的变化&#xff0c;使得跨平台电商数据整合成为电商企业提升竞争力、优化用户体验和实现精准营销的重要手段。在这个过程中&#…

时间类型数据处理:基于Python的datetime库和pandas库

一、datetime库常用方法 日期的数据类型主要有两种&#xff1a;一是包含时间的datetime类型&#xff0c;二是不包含时间的date类型。这里的时间指具体的时、分、秒、甚至毫秒。 1、自定义日期、时间、获取本地时间、获取本地日期、获取年份、月份、月号、小时、分钟、秒、星期…

20250120 Flink 中的 Rescaling 算子

什么是 Rescaling&#xff1f; 通俗地说&#xff0c;Rescaling 就是 Flink 中对任务的并行度&#xff08;Parallelism&#xff09;进行调整的过程。简单来说&#xff0c;就是在任务运行时或重新部署时&#xff0c;改变 Flink 应用中算子的工作线程数量&#xff0c;使其能够更好…

机器学习2 (笔记)(朴素贝叶斯,集成学习,KNN和matlab运用)

朴素贝叶斯模型 贝叶斯定理&#xff1a; 常见类型 算法流程 优缺点 集成学习算法 基本原理 常见方法 KNN&#xff08;聚类模型&#xff09; 算法性质&#xff1a; 核心原理&#xff1a; 算法流程 优缺点 matlab中的运用 朴素贝叶斯模型 朴素贝叶斯模型是基于贝叶斯…