7. vue3.0 中为什么要使用 Proxy,它相比以前的实现方式有什么改进
7.1 原回答
- Vue2.x通过给每个对象添加
getter setter
属性去改变对象,实现对数据的观测,Vue3.x通过Proxy代理目标对象,且一开始只代理最外层对象,嵌套对象lazy by default
,性能会更好 - 支持数组索引修改,对象属性的增加,删除
7.2 查阅补充
(1)Proxy
-
Proxy 是一个对象,它包装了另一个对象,并允许你拦截对该对象的任何交互。
- Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。
-
我们这样使用它:
const proxy = new Proxy(target, handler)
- target 是 目标对象
- proxy 是 代理对象
-
使用 Proxy 的一个难点是
this
绑定。-
虽然 Proxy 可以代理针对目标对象的访问,但它不是目标对象的透明代理,即不做任何拦截的情况下,也无法保证与目标对象的行为一致。主要原因就是在 Proxy 代理的情况下,目标对象内部的
this
关键字会指向 Proxy 代理。const target = { m: function () { console.log(
-