defineProperty函数复习
重要!!!!如果要修改age的值!!!!
<script>
let number=18
let person={
name:"zhangsan",
sex:"nan",
}
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){
console.log("有人修改age了,且值是",value)
number=value
}
})
console.log(person);
</script>
何为数据代理?
通过一个对象对另一个对象中属性的操作,包括读和写
简单的数据代理例子:
<script>
//假设两个obj1,obj2,想通过obj2修改obj1
obj1={x:1}
obj2={y:2}
Object.defineProperty(obj2,"x",{
get(){
return obj1.x
},
set(value){
obj1.x=value
}
})
</script>
vue中数据代理
这两条线就是数据代理!!!!
当我们修改name的时候实际上修改的是通过set修改_data,当我们访问name的时候实际上是通过get来访问_data.
数据代理的好处:数据代理可以更方便的操作data里面的数据
-data里面干什么
这个里面做的是数据劫持!!!实现一个响应式操作