为什么访问this.message会做一层代理?
来源:2-2 new Vue 发生了什么

慕仔6385915
2018-11-24
为什么访问this.message会做一层代理到this._data.message?明明实例中就有data中定义的message呢
写回答
2回答
-
首先,你定义一个组件是通过一个对象,这个对象包含 data 属性,然后你在 data 中定义的 message;
但这个对象并不是组件的实例,而是在实例化组件的时候,作为 options 传入;
那么在实例化组件的时候,会先合并 options 合并到组件实例的 vm.$options 上;
然后在 initData 的时候,会根据 vm.$options.data 计算赋值到 vm._data 上;
到目前为止,组件实例上都不会有 vm.message,而 vm._data.message 是存在的;
所以我们要做一层代理,当我们访问 vm.message 的时候实际上访问的是 vm._data.message212018-11-25 -
Arey_jy
2018-11-24
比如说
mounted() { console.log(this.message, this.$refs) }, data: { message: 'Hello Vue!', $refs: 1 },
输出: Hello Vue! {}
可以防止在data中定义的变量覆盖Vue 内部的私有变量
122020-12-16
相似问题