//html
{
{message}}
//script
newVue({
el:"#app",
router,
template:"",
data(){return{
message
}
},
mounted(){
console.log(this.message)//问题:为什么可以通过this.message这种方式来访问data中的数据呢
}
})
在vue源码中,可以发现数据data是定义在初始化对象$options中的,要想访问到data中的key字段,正常来说是通过vm.$options.data.key来访问的。那么,在vue中是怎么实现利用vm.key就能访问到key字段呢。在源码中,有一个方法为initData(),方法所在为:initMixin() -> _init() -> initState() ->initData(),具体如下:
function initData (vm) {
var data = vm.$options.data;
data = vm._data = typeof data === 'function'
? getData(data, vm)
: data || {};//将vm.$options.data存储在变量data中,同时vm新建私有属性_data映射该对象,这样就可以通过vm._data访问到data数据