-
Object.defineProperty
只能劫持对象的属性,而Proxy
是直接代理对象
由于Object.defineProperty
只能对属性进行劫持,需要遍历对象的每个属性。而Proxy
可以直接代理对象。 -
Object.defineProperty
对新增属性需要手动进行Observe
, 由于Object.defineProperty
劫持的是对象的属性,所以新增属性时,需要重新遍历对象,对其新增属性再使用Object.defineProperty
进行劫持。 也正是因为这个原因,使用 Vue 给data
中的数组或对象新增属性时,需要使用vm.$set
才能保证新增的属性也是响应式的。 -
Proxy
支持13种拦截操作,这是defineProperty
所不具有的。 - 新标准性能红利
Proxy
作为新标准,长远来看,JS引擎会继续优化Proxy
,但getter
和setter
基本不会再有针对性优化。 -
Proxy
兼容性差 目前并没有一个完整支持Proxy
所有拦截方法的Polyfill方案
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。