zoukankan      html  css  js  c++  java
  • 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新标准将受到浏览器厂商重点持续的性能优化

  • 相关阅读:
    list tuple dict 方法
    字典的方法
    看不懂的缩写
    canvas画图
    DOM2和DOM3
    表单脚本
    事件
    DOM扩展
    DOM
    BOM
  • 原文地址:https://www.cnblogs.com/qinglaoshi/p/13269739.html
Copyright © 2011-2022 走看看