You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Vue为什么要实例一个Observer对象,而每一个Observer对象都挂有三个属性:value(原始数据)、vmCount(number of vms that have this object as root $data,被VM作为根数据的个数)、dep。起初我以为这个dep这个属性对于所有的observer都有用。直到后来看了好几遍Vue源码才体会到并非起初想得那样。劫持数据的过程:vm上先得到一个_data属性,将需要劫持的数据挂上去。类似于以下代码:
Vue为什么要实例一个Observer对象,而每一个Observer对象都挂有三个属性:value(原始数据)、vmCount(number of vms that have this object as root $data,被VM作为根数据的个数)、dep。起初我以为这个dep这个属性对于所有的observer都有用。直到后来看了好几遍Vue源码才体会到并非起初想得那样。劫持数据的过程:vm上先得到一个_data属性,将需要劫持的数据挂上去。类似于以下代码:
得到_data差不多是
{name: {cc: 'slm'}}
,然后走observe方法,判断当前对象(_data)是否存在__ob__属性,如果存在,则说明已经被劫持过了,不需要再劫持处理了。没有则实例话一个Observer对象(满足条件一般是对象或数组)。第一次的话实例一个Observer对象。先在当前对象(或数组)def一个__ob__属性,用于标记并存放当前的value,这个属性之后的操作几乎不用。接下来就要对该对象或者数组遍历并做劫持了。walk -> defineRactive 劫持。重头戏来了:The text was updated successfully, but these errors were encountered: