proxy 和 object.defineProperty
二者常用于数据劫持:在访问或者修改对象的某个属性时,通过一段代码拦截这个行为,进行额外的操作或者修改返回结果。数据劫持最典型的应用----双向的数据绑定
object.defineProperty
1 不能监听数组的变化
2 必须遍历对象的每个属性
3 必须深层遍历嵌套对象
proxy
1 针对对象 针对的是整个对象 而不是对象的某个属性
2 支持数组 不需要对数组的方法进行重载 省去众多hack
3 嵌套支持 get方法里递归调用proxy并返回
优势: Proxy 的第二个参数可以有 13 种拦截方法,比 Object.defineProperty() 要更加丰富,Proxy 作为新标准受到浏览器厂商的重点关注和性能优化,相比之下 Object.defineProperty() 是一个已有的老方法。 劣势: Proxy 的兼容性不如 Object.defineProperty() (caniuse 的数据表明,QQ 浏览器和百度浏览器并不支持 Proxy,这对国内移动开发来说估计无法接受,但两者都支持 Object.defineProperty()),不能使用 polyfill 来处理兼容性。
原文链接中讲述的更详细:数据劫持or数据代理