数据代理:通过一个对象代理另一个对象中属性的操作
let obj = {
x:100
}
let obj2 = {
y:200
}
Object.defineProperty(obj2,'x',{//向obj2追加一个属性x
get(){
return obj.x //当访问obj2的x属性时,就返回obj中的x属性
},
set(value){
obj.x = value //修改obj2的x属性时,就改变obj中x的属性
}
})
vue中的数据代理:
通过vm对象来代理data对象中的属性操作
好处:更加方便地操作data中的数据
基本原理:通过Object.defineProperty()把data对象中所有属性添加到vm上,为每一个添加到vm的属性都指定一个getter/setter,在getter/setter内部去操作data中对应的属性。