vue中如何检测数组变化(vue基础,面试,源码级讲解)

news2024/10/22 15:13:34

大家有什么不明白的地方可以分享在评论区,大家一起探讨哦~~

(如果对数据劫持还有所不明白的小伙伴,可以去看看上一篇文章哦)

在vue2中,是如何对数组进行劫持的呢?

简单代码实现:

 在vue2中,不会对数组的每一项数据进行递归Object.defineProperty()方法劫持,这样是很浪费性能的。而是会重写数组方法(js数组中常用的那七种方法)来进行劫持。

当数据为数组时,修改数组的原型为新数组原型(newsArrayProto),而newsArrayProto是在原来的基础上对数组方法进行了加工重写(看代码中的16-21行)。

那我们来看看源码吧!

源码:baseHandlers.ts - vuejs/core - GitHub1s

 可以看到,在画红线的地方进行判断是否为数组类型(多余的代码不必纠结,感兴趣的小伙伴可以自己去推敲)。

在59行判断是否支持原型,因为要考虑兼容性的问题。

支持时,61行中将原数组原型修改为加工好的新数组原型,arrayMethods就是已经将数组方法重写好了的数组原型;不支持的话,采用循环的方式,重写修改每一项数组数据的数组方法。

在71行,调用方法,还会继续遍历递归数组中的每一项数据,判断是否有数据为对象或数组类型。

如果是基本数据类型,随着大箭头的方向,来到最顶部就会结束了。

代码如下:

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

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

相关文章

学习中,师傅b站泷羽sec——xss挖掘过程

某职业技术学院网站xss挖掘: 资产归纳 例如:先把功能点都看一遍,大部分都是文章 根据信息搜集第一课学习到一般主站的防御力是比较强的,出现漏洞的点不是对新手不友好。 在资产验证过程中还是把主站看了一遍 没有发现有攻击的机会…

G1 GAN生成MNIST手写数字图像

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 G1 GAN生成MNIST手写数字图像 1. 生成对抗网络 (GAN) 简介 生成对抗网络 (GAN) 是一种通过“对抗性”学习生成数据的深度学习模型,通常用于生成…

如何调试浏览器中的内存泄漏?

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介⭐ 如何调试浏览器中的内存泄漏?1. 什么是内存泄漏?2. 调试内存泄漏的工具3. 如何使用 Memory 面板进行内存调试3.1 获取内存快照(Heap Snapshot)获取内存快照的步骤:快照…

即时通讯增加Redis渠道

情况说明 在本地和服务器分别启动im服务,当本地发送消息时,会发现服务器上并没有收到消息 初版im只支持单机版,不支持分布式的情况。此次针对该情况对项目进行优化,文档中贴出的代码非完整代码,可自行查看参考资料[2] 代码结构调…

C Primer Plus 第9章——第一篇

你该逆袭了 文章目录 一、复习函数1、定义带形式参数的函数2、声明带形式参数函数的原型3、使用 return 从函数中返回值(1)、返回值不仅可以赋给变量,也可以被用作表达式的一部分。(2)、返回值不一定是变量的值&#x…

springboot redisTemplate hash 序列化探讨

前提提要:这个是个人小白总结,写完博客后开始厌蠢。 redisTemplate 有两种插入hash的方式 redisTemplate.opsForHash().putAll(key, map);redisTemplate.opsForHash().put(key, field, value);在使用的过程中,难免会疑问为什么 key field v…

Windows下部署autMan

一、安装autMan 下载autMan压缩包 https://github.com/hdbjlizhe/fanli/releases 解压安装包 二、运行(注意,无论是交互运行还是静默运行,终端均不可关闭) 基本运行 双击autMan.exe运行。 高级运行 在autMan文件夹&#xff0…

Sigrity Power SI Model Extraction模式如何提取电源网络的S参数和阻抗操作指导(一)

Sigrity Power SI Model Extraction模式如何提取电源网络的S参数和阻抗操作指导(一) Sigrity PowerSI是频域电磁场仿真工具,以下图为例介绍如果用它观测电源的网络的S参数以及阻抗的频域曲线. 观测IC端电源网络的自阻抗 1. 用powerSi.exe打开该SPD文件

工业相机详解及选型

工业相机相对于传统的民用相机而言,具有搞图像稳定性,传输能力和高抗干扰能力等,目前市面上的工业相机大多数是基于CCD(Charge Coupled Device)或CMOS(Complementary Metal Oxide Semiconductor)芯片的相机。 一,工业相机的分类 …

sentinel原理源码分析系列(六)-统计指标

调用链和统计节点构建完成,进入统计指标插槽,统计指标在最后执行的,等后面的插槽执行完,资源调用完成了,根据资源调用情况累计。指标统计是最重要的插槽,所有的功能都依靠指标数据,指标的正确与…

你知道什么叫数控加工中心吗?

加工中心是一种高度机电一体化的数控机床,具有刀库,自动换刀功能,对工件一次装夹后进行多工序加工的数控机床。通过计算的控制系统和稳定的机械结构,加工中心能够实现高精度的加工,确保工件的尺寸精度和表面质量。通过…

实用好助手

在现代职场中,拥有高效且适用的工具能够显著提升我们的工作效率与质量。除了常见的办公软件,还有许多小众但非常实用的工具可以大幅度优化工作流程。以下是另外五个推荐的工作软件,它们各自具备独特的功能与优势,值得一试。 1 …

【Docker系列】在 Docker 容器中打印和配置环境变量

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

双十一有哪些值得买的东西?2024年最全双十一好物推荐榜单来了!

双十一能够入手的好东西那肯定是非常多的,不过要想买到性价比高、实用性强的好物,就必须得做些功课了。作为一个智能家居和数码领域的博主,自然知道每年双十一买什么是最划算的。如果有朋友正在为双十一不知道买什么而发愁,那就快…

python+大数据+基于热门视频的数据分析研究【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

登录后端笔记(一):注册、登录;基于MD5加密

一、注册 一、参数:lombok pom.xml里引入依赖; 二、响应数据:Result 原视频 两个注解对应有参无参生成构造方法; data类型是泛型T,即data在使用时可对应object可对应string字符串可对应bean对象可对应map等&#x…

微信碰一碰支付系统有哪些好的?教程详解抢先看!

支付宝“碰一碰支付”的风刚刚刮起来,它的老对手微信便紧随其后,推出了自己的碰一碰支付设备,再次印证了这个项目市场前景广阔的同时,也让与碰一碰支付系统相关问题的热度又上了一层楼,尤其是微信碰一碰支付系统有哪些…

炒股VS炒游戏装备,哪个更好做

这个项目,赚个10%都是要被嫌弃的 虽然天天都在抒发自己对股市的看法,但自己自始至终也没有买进任何一支股票。之所以对这个话题感兴趣,着实是因为手上的游戏搬砖项目也是国际性买卖,跟国际形势,国际汇率挂钩&#xff0…

RAG总结及前沿之Meta-Chunking切分思路及VisRAG多模态实现机制解读

今天我们来看两个工作,一个是关于RAG的切分策略,Meta-Chunking,里面基于数学常识提到的边际采样分块(Margin Sampling Chunking)通过LLMs对连续句子是否需要分割进行二元分类,基于边际采样得到的概率差异来…

基于SSM+微信小程序的房屋租赁管理系统(房屋2)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的房屋租赁管理系统实现了有管理员、中介和用户。 1、管理员功能有,个人中心,用户管理,中介管理,房屋信息管理&#xff…