上一章我们讲到,vue对于对象的变化侦测是通过Object.defineProperty方法(实则是通过getter/setter)来实现的。本章我们来讲解vue对于数组的变化侦测是如何实现的。
Array不同于Object,我们在使用的时候其实是通过Array原型上的方法来改变数组的内容的,因此侦测Object变化的那种方式就行不通了。
侦测Array变化的拦截器
拦截器其实就是一个和Array.prototype一样的Object,里面的书香和数组原型的一模一样,只不过其中一些方法是经过我们处理的。
Array原型中可以改变数组自身内容的方法有7个:
- push
- pop
- shift
- unshift
- splice
- sort
- reverse
下面是我们创建的拦截器:
const arrayProto = Array.prototype;
export const arrayMethods = Object.cre