object.defineproperty
1.给对象添加age属性且值为18
Object.defineProperty(person, 'age',{value:18}
2.控制属性是否可以枚举,也就是该属性是否可以被遍历,默认值为false
enumerable:true
3.控制属性的值是否可以被修改,默认值为false
writable:true
4.控制属性是否可以被删除,默认值是false
configurable:true
5.当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值.
get(){console.log('读取age属性了'); return number}
6.当有人修改person的age属性时,set函数(setter)就会被调用,且会受到修改的具体值.
set(value) { console.log('有人修改age属性且值是', value); number = value }
例子
let number = 18
let person = {
name: 'zs',
sex: '男'
}
// 给person对象添加属性age=18,但是该属性是不可遍历的,要想可以遍历添加属性enumerable:true
Object.defineProperty(person, 'age', {
// value:18,
// enumerable:true,//控制属性是否可以枚举,默认值是false
// writable:true, //控制属性的值是否可以被修改,默认值是false
// configurable:true, //控制属性是否可以被删除,默认值是false
// 当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
get() {
console.log('读取age属性了');
return number
},
// 当有人修改person的age属性时,set函数(setter)就会被调用,且会受到修改的具体值
set(value) {
console.log('有人修改age属性且值是', value);
number = value
}
})
console.log(person);