前端技巧|vue双向绑定原理,助你面试成功「建议收藏」

前端技巧|vue双向绑定原理,助你面试成功「建议收藏」在面试一些大厂的时候,面试官可能会问到你vue双向数据绑定的原理是什么?有些小伙伴不知道是什么东西,这样你在面试官的眼里就大打折扣了。今天小千就来给大家介绍一下vue的双向绑定原理,千万不要错过啦。vue双向绑定大家其实对于这个问题不会很陌生,vue中采用mvvm的模式,内置vm将view层与model层两者进行关联,任何一方的变化都会让另外一方受到影响。那回答完后,面试官还会继续追问,请回答一下你理解的双向数据绑定背后的原理是什么?那今天我们就一起探讨一下vue的背后的一些方式实现。所谓要实现双向数

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在面试一些大厂的时候,面试官可能会问到你vue双向数据绑定的原理是什么?有些小伙伴不知道是什么东西,这样你在面试官的眼里就大打折扣了。今天小千就来给大家介绍一下vue的双向绑定原理,千万不要错过啦。

vue双向绑定

大家其实对于这个问题不会很陌生,vue中采用mvvm的模式,内置vm将view层与model层两者进行关联,任何一方的变化都会让另外一方受到影响。那回答完后,面试官还会继续追问,请回答一下你理解的双向数据绑定背后的原理是什么?那今天我们就一起探讨一下vue的背后的一些方式实现。

所谓要实现双向数据绑定,vue中内部采用了发布-订阅模式。内部结合了Object.defineProperty这个ES5的新特性(ie8浏览器可不支持哦…),对vue传入的数据进行了相应的数据拦截,为其动态添加get与set方法。当数据变化的时候,就会触发对应的set方法,当set方法触发完成的时候,内部会进一步触发watcher,当数据改变了,接着进行虚拟dom对比,执行render,后续视图更新操作完毕。

来,直接上图看一下
在这里插入图片描述
好,分析完原理后,我们来看下es5这个方法Object.defineProperty有什么用呢?

上代码运行一下:
在这里插入图片描述
运行的时候,我们不难发现,输入框里面的内容改变的时候,p标签里面的值也会对应的得到变化。原因是因为当输入框的内容发生变化的时候,我们获取到了输入框的值,然后将其赋值给object.msg属性。这样object的msg属性的set方法就会被执行,从而将对应的content值进行了改变。

那后续当我们去修改数据,视图会不会自动更新呢?
在这里插入图片描述
这样,整了一个定时器,过了2s中,修改了对象的数据,对象数据发生变化,从而又会触发set方法,实现了响应的数据改变,视图也会变成了hello-world的值。其实,这就是借助了vue中的Object.defineProperty对于数据的拦截处理的流程。

补充小贴士

vue 2.x中使用的Object.defineProperty对于数据进行拦截,其实还是有缺陷的

1、对象属性的新加或者删除无法监听;

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

那为啥2.x的时候不解决呢,从两点考虑:

1.性能:通过遍历对象的属性进行监听,但是属性值也是对象就需要深度遍历了,这时候显然能够劫持完整对象更好

2.无法监听数组:属性值改为数组,数组也算是一种特殊的对象,下标其实就是对象的属性,理论上是可以通过

Object.defineProperty来处理的,那尤大大为什么没有采用这种方式呢,猜测源于数组的使用场景,数组的主要操作场景是遍历,如果每一个元素都挂载set和get方法,会产生巨大性能消耗,而且数组下标变化频繁,操作方法居多,一旦数组长度发生变化,在无法自动检测的状态下,手动更新会是一个相当繁琐的工作。

那vue中是如何实现对数组的劫持呢,对7种常用的数组操作进行了重写,分别是push() 、pop() 、shift()、 unshift() 、splice() 、sort()、 reverse(),其中Vue.set()对于数组的处理其实就是调用了splice方法。

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

那么到这一步,恭喜哦!你已经明白了vue2.x的双向数据绑定原理了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183493.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • maven常见命令及打包方式

    maven常见命令及打包方式做项目时使用maven构建项目已经是现在的流行做法了。maven最大的作用就是用于对项目中jar包依赖的统一管理。maven还有一些常用的命令,更加方便项目的管理。下面介绍一些常用的命令及其作用。(1)mavenclean。对项目进行清理,清理的过程中会删除删除target目录下编译的内容。(2)mavencompile。编译项目源代码。(3)maventest。对项目的运…

    2022年5月10日
  • ipv4和ipv6对比(IPV4)

    TCP/IP的心脏是互联网层,这一层主要由IP和ICMP两个协议组成。IP相当于OSI参考模型中的第三层——网络层。而网络层的作用是实现终端节点之间的通信。这种终端节点之间的通信也叫‘点到点’通信。IP地址用于连接在网络中的所有主机中识别出进行通信的目标地址。谷在tcp/ip通信的所有主机中必须设置IP地址。路由控制、多条路由和路由控制表使得数据包可以成功抵达要去的地方。路由控制表记录着此…

    2022年4月15日
  • jar包和war包的区别

    jar包和war包的区别1.概念1.1jar包JAR包是类的归档文件,JAR文件格式以流行的ZIP文件格式为基础。与ZIP文件不同的是,JAR文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和JVM这样的工具直接使用。2.2war包war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西。2.目录结构

    2022年5月10日
  • xsync同步脚本的使用

    xsync同步脚本的使用xsync同步脚本的使用1.简介在集群机器配置时,经常需要将一个文件或目录copy到同样的多台集群上,如果一个一个机器去复制,比较麻烦。如果有一个办法,通过一条命令就可以实现这个目的,就简单多了。xsync就是这样一个同步脚本。xsync其实是对rsync脚本的二次封装,脚本内容可以根据自己需要进行修改。2.配置集群hostname2.1配置hostname文件在每台机器执行命令c…

    2022年6月2日
  • lunix部署_linux防火墙配置基本步骤

    lunix部署_linux防火墙配置基本步骤lunix重装好了以后都是空的一、创建相关文件夹二、将tomcat压缩包放到相关文件夹下三、解压tomcat压缩包,即安装过程四、修改安装好的tomcat文件夹名称为项目名称或者相关名称五,修改tomcat的/conf/server.xml文件,添加war包指向并可以将项目名去除登录

    2022年9月28日
  • Min Stack

    Min Stack

    2021年9月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号