src/observer/index.js中对数组的响应式处理,重写了原生修改原始数组的方法,保留了功能,可以在数组变化时触发notify通知watcher更新view,不处理index和length,虽然修改了数组,但是没有触发notify,因为我们只处理数组中的元素,不处理属性(属性包括下标,长度等),不是因为性能问题。备选方案:通过vm.arr.splice(0,1,100)Vue.set()this.$updateForce()源码部分if(Array.isArray(value)){//hasProt用于判断当前浏览器是否支持objectprototype__proto__//patch数组中的prototype方法,如果数组有变化调用notify更新view数组的所有元素,是对象的元素都会被转换成响应式对象,而不是所有的Attributes!!!!//下标和长度是属性,由于性能问题不能通过vm.msg[0]更新//可以使用vm.msg.splice(0,1,100)代替this.observeArray(value)}else{//遍历对象转换setter/getter中的每一个属性this.walk(value)}constarrayProto=Array.prototype//创建一个对象,其原型指向传入的参数(这个对象的原型指向Array.prototype)exportconstarrayMethods=Object.create(arrayProto)//修改原始数组元素的方法(修改原始数据会调用dep.notify通知watcher更新视图,但是数组的原始方法不会,需要修补)constmethodsToPatch=['push','pop','shift','unshift','splice','sort','reverse']
