一、Object.defineProperty
三个参数:
- 对象(要添加属性的对象)
- 要添加的属性名
- 配置项
let person = {
name: '11',
age: 12
}
Object.defineProperty( person, 'sex', {
value: '男‘
})
这样添加的属性,不可以枚举(不参与遍历)
console.log( Object.keys(person) ) // [name,age] 不包括sex
想要让可以枚举在配置项中加属性
let a = '女'
Object.defineProperty( person, 'sex', {
value: '男‘,
enumerable:true, // 控制属性是否可以枚举
writable:true, // 控制属性是否可以被修改,默认不可以
configurable: true // 控制属性是否可以被删除,默认不可以
// 当有人读取person的sex属性时,就会调用getter,返回的值就是sex的属性值
get() {
return a
}
// 当有人修改person的sex属性时,就会调用setter,且会收到修改的具体值
set(val) {
console.log( val )
a = val
}
})