#data
类型:Obiect | Function
data是我们使用Vue 时 挂在到Vue实例上的数据对象。
因为Vue的响应式,浅显的说是Vue在2.x版本使用Object.definePropety()方法遍历data的所有propety,把这些propety全部转换为getter/setter,这样就可以让vue追踪依赖,当propety被访问和修改时,能及时通知变更。 (更深层原理请谷歌深层响应原理和看vue源码。)当被观察过之后,你就无法在根数据对象上添加响应式的propety,这就是要提前声明你有可能用到的propety。
ps:vue3.x已经将Object.definePropety()方法替换成了基于Es6的Protxy。详情可谷歌ES6和vue3.x新特性。
data的类型有两种,function类型是属于组件的独有类型,因为组件是可复用的,所以如果组件的data是Object,那么组件会被用来创建多个实例,多个组件就会共享这个数据对象。所以我们提供data函数,每次创建一个新实例时,我们调用data函数,返回初始数据对象。
实例创建后,使用vm.$data 访问原始数据对象。