1.回顾Object.defineproperty方法
例1:
<body>
<script type="text/javascript">
let person = {
name:"张三",
sex:"男"
}
Object.defineProperty(person,'age',{
value:18
})
//age不可被枚举,不可被修改,不可被删除;可以在value后设置enumerable、writable、configurable为true
console.log(person)
</script>
</body>
例2:实现修改number——修改age
<body>
<script type="text/javascript">
let number = 18
let person = {
name:"张三",
sex:"男"
}
Object.defineProperty(person,'age',{
// value:18,
// writable:true
//当有人读取age属性时,get函数被调用,返回值就是age的值
get:function(){
return number
},
//当有人修改age属性时,set函数被调用,且收到具体的值
set(value){
console.log("有人修改了age属性,且值是",value)
number = value
}
})
</script>
</body>
2.何为数据代理?
通过一个对象代理对另一个对象中的属性操作(读/写)
例:通过修改obj2的值来修改obj.x的值
<body>
<script>
let obj={x:100}
let obj2={y:200}
Object.defineProperty(obj2,'x',{
get(){
return obj.x
},
set(value){
obj.x = value
}
})
</script>
</body>
3.Vue中的数据代理
通过vm对象来代理data对象中属性的操作
vm收集数据,将data留住在 vm._data
,并且把data对象中所有属性添加到vm上,为每一个都属性指定一个getter和setter