/* obj:目标对象
* prop:属性名
* descriptor:描述
*/
Object.defineProperty(obj, prop, descriptor)
let person = {
name:'张三',
sex:'男',
}
Object.defineProperty(person,age,{
value:18,
enumerable:true, // 数据是否可以枚举, 默认false
writable:true, // 数据是否可修改,默认false
configurable:true // 数据是否可以被删除,默认false
})
console.log(person) // {name:'张三',sex:'男',age:18}
console.log(Object.keys(person)) // ['name','sex'] defineproperty数据不可枚举
let number = 19;
let person = {
name:'张三',
sex:'男',
}
Object.defineProperty(person,age,{
// 当person对象的age属性被读取的时候调用,返回age的值
get(){
return number
},
// 当修改person对象的age属性的值时调用,并收到修改的值
set(value){
number = value
}
})
数据代理:通过一个对象代理对另一个对象中属性的操作
let obj = { x: 100 };
let obj2 = { y: 300 }
Object.definePropetry(obj2,'x',{
get(){
return obj.x
},
set(value){
obj.x = value
}
})
obj2.x = 500;
console.log(obj.x) // 500