当前位置: 首页 > Web前端 > vue.js

为什么Vue3.0要使用proxy来实现响应式?

时间:2023-04-01 11:51:29 vue.js

Object.defineProperty只能劫持对象的属性,Proxy是直接代理对象由于Object.defineProperty只能劫持属性,所以需要遍历对象的每一个属性。Proxy可以直接代理对象。Object.defineProperty需要手动观察新增的属性。由于Object.defineProperty劫持了对象的属性,所以在添加新的属性时,需要再次遍历对象,然后使用Object.defineProperty来劫持新的属性。也正是这个原因,在使用Vue给数据中的数组或者对象添加属性的时候,需要使用vm.$set来保证新增的属性也是响应式的。Proxy支持13种拦截操作,这是defineProperty所没有的。新标准绩效奖金代理是一个新标准。从长远来看,JS引擎会继续优化Proxy,但是getters和setters基本不会有针对性的优化。Proxy兼容性差目前还没有完全支持Proxy所有拦截方式的Polyfill方案