数据代理–通过一个对象代理另一个对象中的属性(读和写)
<script>
let obj={x:100}
let obj2={y:200}
//通过obj2来代理obj的值
Object.defineProperty(obj2,'x',{
get(){
return obj.x;
},
set(value){
obj.x=value
}
})
</script>
这个例子展示的是可以通过obj2来读和写obj的x属性的值。
Vue中数据代理:
通过vm对象来代理_data对象中属性的操作,本来需要使用_data.name才能获取到name值,现在可以直接使用name,这样能够更方便的操作data中的数据。
其主要原理是:
通过Onject.defineProperty()把_data对象的所有属性都添加到vm上,为每一个添加到vm上的属性,都指定getter、setter方法,在getter/setter内部去操作(读、写)data中对应的属性。