Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象
声明一个对象
let iphone = 20
let person = {
name: '张三',
sex: '男',
// age: 20
}
首先 使用`Object.defineProperty()这个方法给person对象添加age属性
Object.defineProperty()接收3个参数
1.给谁添加属性 2.添加的属性名 3.其他配置项
Object.defineProperty(person,'age',{
value:18
})
这个时候控制台打印perosn 发现age属性已经添加上去了
此时可以用for遍历一下这个对象
for (let key in person) {
console.log('@', person[key]) //@张三 @男
}
发现只打印了源数据 并没有打印出添加的age属性,于是得出结论 age属性不可被枚举(遍历)
如果想要让这个属性可遍历 此时可以添加一个配置项
enumerable: true, // 控制属性是否可以枚举,默认值是false
如果想删除age属性
delete person.age // false
发现返回false 说明删除失败 这个时候再添加一个配置项 让age属性可以被删除
// configurable: true, // 控制属性是否可以被删除,默认值为false
Object.defineProperty()方法有两个函数 一个是get 另一个是set
// 当有人读取person的age属性时,get函数就会被调用,且返回值就是age的值
// 当有人修改person的age属性时, set函数(setter)函数就会被调用, 且会收到修改的具体值
当修改age属性时 set函数会被调用 此时set会接收到一个参数value 这个参数表示修改后的值