为什么对数组不适用object.defineProperty

87 阅读1分钟

vue对数组为啥不适用object.defineProperty

因为对数组使用数据劫持,会对数组里面的每一项都进行劫持,数组中一万条数据,就会劫持10000次,性能极差

所以要对数组方法进行重写 push pop unshiif shift reverse sort splice (不是覆盖),因为只有被vue控制的数组才需要重写

重写数组的方法的思路(aop切片编程)

  • 使用原有数组方法进行数据的增删改,
  • 通知视图更新

数组重写

array.jpg

怎么使用重写后的方法

在进行监听的时候进行判断,判断值是数组时

  • 如果支持原型对象,就将value值得原型对象指向改写后的数组原型
  • 否则, 则是遍历重写后数组中的方法key,进行覆盖使用重写后的方法
  • array-proto.jpg