MVVM模型
- M:模型(Model) :对应
data中的数据 - V: 视图(View) :模板
- VM:视图模型(ViewModel):Vue实例对象
M:
data:{ name:'wyatt', address:'xaut', }
V:
<div id="root"> <h1>名称:{{name}}</h1> <h1>学校:{{address}}</h1> </div>
VM:
观察发现:
- M中所有的属性,最后都出现在了VM中。
- VM中所有的属性及Vue原型上所有属性,在Vue模板中都可以直接使用。
数据代理
数据代理的实现基础
Object.defineProperty()方法允许通过属性描述对象,定义或修改一个属性,然后返回修改后的对象,它的用法如下。
Object.defineProperty(object, propertyName, attributesObject)
object:属性所在的对象
propertyName:字符串,表示属性
attributesObject:属性描述对象
什么是数据代理
数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)
//例:使用对象obj2代理对象obj中x属性的读/x let obj = {x:100} let obj2 = {y:200} Object.defineProperty(obj2,'x',{ //当有人读取obj2的x属性时,get函数(getter)就会被调用,且返回值就是obj.x的值 get(){ return obj.x }, //当有人修改obj2的x属性时,set函数(setter)就会被调用,且会收到修改的具体值 set(value){ obj.x = value } })
- 定义两个对象
obj和obj2,通过Object.defineProperty()方法给对象obj2添加一个属性x - 通过
get()方法使obj2.x获取到obj.x的值,实现通过obj2对象代理obj.x属性的读 - 通过
set()方法使obj2.x获取到修改的具体值,将该值赋给obj.x,实现通过obj2对象代理obj.x属性的写。
Vue中的数据代理
- Vue中的数据代理:
- 通过
vm对象来代理_data对象中属性的操作(读/写)
_data是来自new Vue时的对象data
- Vue中数据代理的好处:
- 更加方便的操作
data中的数据
- 基本原理:
- 通过
Object.defineProperty()把_data对象中所有属性添加到vm中 - 为每一个添加到vm上的属性,都指定一个
getter/setter - 在
getter/setter内部去操作(读/写)_data中对应的属性。

