vm身上有 _data 属性,_data的属性来自new vue时传入的数据,但是vue做了数据处理,给每个属性加入了getter和setter,因此数据改变时会调用set方法,set方法里面做了重新解析模板的操作(重新解析模板–>生成新的虚拟dom–>新旧dom对比,diff算法–>更新页面)
如果直接往vm._data或者vm身上的对象添加属性,则该属性没有getter,setter方法,无法实现数据监测也无法读取,应该使用Vue.set(obj,prom,value)或者vm.$set(obj,prom,value),注意:vue.set只能给data里面的某个对象添加属性,不可以直接加在data,或者vm上(也就是obj不能是vue实例,或者vue实例的根数据对象)
vue监测数组改变:不能通过下标操作数组,只能通过以下7个方法以及vue.set和vm.$set操作数组
因为vue对这个7个方法进行了重写,方法里面做了重新解析模板的操作(重新解析模板–>生成新的虚拟dom–>新旧dom对比,diff算法–>更新页面)