当前位置:   article > 正文

object.defineproperty 和 proxy 的区别_proxy中有哪些objectdefine propterty没有的内容

proxy中有哪些objectdefine propterty没有的内容

什么是Proxy

Proxy是ES6推出的一个类,给对象架设一层拦截器,但凡要访问或者修改这个对象上的值或者属性,都必须先经过这层拦截器, Proxy也叫代理器, 它代理了对对象的操作

什么是Object.defineProperty

Object.defineProperty是对对象上的属性进行新增或者修改

Proxy的优势如下

  • Proxy可以直接监听整个对象而非属性。
    1. var newProxyObj = {name: 'chrome', age:'0'}
    2. var proxyObj = new Proxy(newProxyObj, {
    3. set(target, key, value, receiver) {
    4. consnole.log('proxy改了', key, value)
    5. }
    6. })
    7. proxyObj.name = 'google'; // proxy修改了 name google

  • Proxy可以直接监听数组的变化。
  • Proxy有13中拦截方法,如ownKeys、deleteProperty、has 等是 Object.defineProperty 不具备的。
  • Proxy返回的是一个新对象,我们可以只操作新的对象达到目的,而Object.defineProperty只能遍历对象属性直接修改;
  • Proxy做为新标准将受到浏览器产商重点持续的性能优化,也就是传说中的新标准的性能红利。

Object.defineProperty 的优势如下

  • 兼容性好,支持 IE9,而 Proxy 的存在浏览器兼容性问题,而且无法用 polyfill 磨平。
    1. const obj = {
    2. name: 'chrome'
    3. }
    4. // 数据描述符
    5. Object.defineProperty(obj, 'age', {
    6. configurable: true, // 这个定义是否可以被delete
    7. enumerable: true, // 这个值是否可以被for in 枚举,或者Object.keys获取到
    8. writable: true, // 定义是否可以被修改
    9. value: '100'
    10. })
    11. // 访问器描述符
    12. Object.defineProperty(obj, 'child', {
    13. configurable: true,
    14. enumerable: true,
    15. set(value) {
    16. console.log(value)
    17. },
    18. get() {
    19. console.log(this.value)
    20. }
    21. })

Object.defineProperty 不足在于

  • Object.defineProperty 只能劫持对象的属性,因此我们需要对每个对象的每个属性进行遍历。
  • Object.defineProperty不能监听数组。是通过重写数据的那7个可以改变数据的方法来对数组进行监听的。
  • Object.defineProperty 也不能对 es6 新产生的 Map,Set 这些数据结构做出监听。
  • Object.defineProperty也不能监听新增和删除操作,通过 Vue.set()和 Vue.delete来实现响应式的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/853768
推荐阅读
相关标签
  

闽ICP备14008679号