vue2和vue3的响应式区别
vue响应式依赖的函数
vue2
vue2中依赖es5的Object.defineProperty 属性,该方法可以在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。监听的是对象的属性值。
语法
Object.defineProperty(obj, prop, descriptor)
参数
obj: 要在其上定义属性的对象。
prop: 要定义或修改的属性的名称。
descriptor: 将被定义或修改的属性的描述符。
vue3
vue3中依赖的是es6的proxy和Reflect属性。
Proxy(代理) 可以创建一个代理对象。它能够实现对其他对象的代理,Proxy 只能代理对象,无法代理非对象值,例如字符串、布尔值等。类似于一个拦截器,所有关于该对象的操作都会先经过proxy的代理。
Reflect(反射)1.进行队原数据的数据操作。防止js的单线程将框架卡死。可以通过Reflect的返回值来判断是否成功,防止出现大量的try catch。
语法
let proxy = new Proxy(target, handler)
参数
target —— 是要包装的对象,可以是任何东西,包括函数。
handler —— 代理配置:带有“钩子”(“traps”,即拦截操作的方法)的对象。比如 get 钩子用于读取target属性,set 钩子写入 target 属性等等。
原理
let proxy = new Proxy (object ,{
get(a,b) { return Reflect.get(a,b) } // a是object的原对象, b是操作的属性。用 a[b]获得对象劫持代理
set(a,b,c) {return Reflect.get(a,b,c) } // a是object的原对象, b是操作的属性, c是修改的值,用 a[b] = c 来改变原数据的值。 修改,增加都是依靠set
})
// 修改删除类似操作进行数据劫持
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)