mvvm模型
- M:模型(model)对应data中的数据
- V:视图(View)模板
- VM:视图模型(Viewmodel)Vue实例对象
- MVVM:在vue出现之前就存在,vue只是借鉴了其中的一些规则,所以通常使用vm代表vue实例
- data上所有的属性最后都会出现在vm身上
- vm身上所有的属性及vue原型上所有的属性,在vue模板上都可以直接使用
数据代理(object.defineproperty)
定义:通过一个对象代理对另一个对象中的属性(读/写)
<script type="text/javascript">
let number=18;
let person={
name:'张三',
sex:'男'
}
Object.defineProperty(person, 'age', {
value:18,
enumerable:true,//控制属性是否可以枚举,默认值是false
writable:true,//控制属性是否可以被修改,默认值是false
configurable:true,//控制属性是否可以被删除,默认是是false
//当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
get:function(){
return number
},
//当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体的值
set(value){
number=value
}
})
</script>
vue中的数据代理
- 通过vm对象来代理data对象属性的操作
- 好处:更加方便的操作data中的数据
- 原理:
- 通过Object.defineProperty()把data对象中的所有属性添加到vm上
- 为每一个添加到vm上的属性都指定一个getter和setter
- 在getter和setter内部去操作(读写)data中对应的属性