基本认知
在 Vue 2.x 中,利⽤的是 Object.defineProperty
去劫持对象的访问器(Getter、Setter),
当对象属性值
发⽣变化时可获取变化,然后根据变化来作后续响应;(一个一个的劫持)
在 Vue 3.0 中,则是通过 Proxy
代理对象进⾏类似的操作。劫持的是整个对象, 只要对象中的属性变化了, 都能劫持到
Object.defineProperty和Proxy的优缺点?
Proxy
-
可以直接监听整个对象,⽽⾮是对象的某个属性
-
可以直接监听数组的变化
-
拦截⽅法丰富:不限于
get
set
deleteProperty
、has
等。比
Object.defineProperty
强大很多
Object.defineProperty
-
兼容性较好(可⽀持到 IE9)