• vue2.x中如何监测数组和对象变化?Proxy比Object.defineProperty好在哪?


    vue2.x中如何监测数组和对象变化?

    • Object通过Object.defineProperty结合递归就能实现

      • 比较麻烦就对了,Proxy就直接代理整个对象
    • Array的话 Vue将data中的数组进行了原型链重写,指向了自己定义的数组原型方法。

    • 数组某些情况下会不刷新视图,我们这样解决

      • 当利用索引直接设置一个数组项时,例如vm.items[indexOfItem] = newValue
      //使用该方法进行更新视图
      // vm.$set,Vue.set的一个别名
      vm.$set(vm.items, indexOfItem, newValue)
      复制代码
      • 当修改数组的长度时,例如vm.items.length = newLength
      //使用该方法进行更新视图
      // Array.prototype.splice
      vm.items.splice(indexOfItem, 1, newValue)

    Proxy比Object.defineProperty好在哪?

    「Vue3.x改用Proxy替代Object.defineProperty」

    • Object.defineProperty 只能劫持对象属性的getter和setter方法

      • Proxy 是直接代理劫持整个对象
    • Object.definedProperty 不支持数组(可以监听数组,不过数组方法无法监听自己重写),更准确的说是不支持数组的各种API(所以VUE重写了数组方法

      • Proxy可以直接监听对象和数组的变化,并且有多达13种拦截方法。
    • Proxy 会返回一个代理对象,我们只需要操作新对象即可,而 Object.defineProperty 只能遍历对象属性直接修改

    • Object.definedProperty唯一比Proxy好的一点就是兼容性,不过相信Proxy新标准将受到浏览器厂商重点持续的性能优化

  • 相关阅读:
    FastDfs安装
    groovy学习(二)
    jenkins(一)jenkins使用教程
    jenkins(二)Pipeline语法速成
    groovy学习(一)
    Docker笔记(一)
    运维笔记(一)
    Maven管理(一)
    工厂模式案例与理解
    python 探測端口
  • 原文地址:https://www.cnblogs.com/qinglaoshi/p/13269739.html
Copyright © 2020-2023  润新知