难度级别:中高级及以上 提问概率:85%
在Vue3中,双向绑定的核心API采用了ES6的Proxy代理方案,替换了Vue2的Object.defineProperty方案,那么这是为什么呢?
先说Object.defineProperty,我们知道它主要通过内部的set和get方法,劫持需要处理的对象,判断属性是否更新。所以Object.defineProperty针对的主要是对象已有的属性数据,所以对属性的新增和删除很难检测到,监听数组的类似push、pop等api不友好,如果对象存在嵌套关系,则需要深层递归监听,比较耗费性能。
既然Object.defineProperty存在这么多问题,我们来看一下Proxy解决这些问题是否存在明显优势呢?代码如下
Javascript代码:
<script>
const people = {
name: '张三',hobby: ['运动', '唱歌']}let myProxy =