数据代理:就是通过一个对象代理另一个对象中属性的操作。简单点说就是我们通常操作对象的属性都是本对象.属性名操作。而数据代理的话就是用另一对象去访问另一个对象的属性进行访问或者修改。
<script>
let obj ={x:100}
let obj2={y:200}
Object.defineProperty(obj2,'x',{ //借助defineProperty对obj2进行操作,给它加一个属性
//与obj一样,通过get与set进行配置
get(){
return obj.x //读取obj的x,虽然此方法是obj2被读取时调用,但调用时是根据
//obj2进行读取obj,因为我返回的是obj.x
},
set(value){
return obj.x=value //对obj的x进行修改,同理当调用obj2时,我把obj.x的值修改
}
})
</script>
结果
根据结果我们操作了obj2 但也对obj的值改变了,这就是数据代理