proxy 和 object.defineProperty

566 阅读1分钟

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数据代理