Object.defineProperty的语法
Object.defineProperty(对象, '属性', 配置对象),如下
Object.defineProperty(person, 'age', {
// value: 18,//设置属性值
enumerable: true, //控制属性是否可以被枚举(遍历),默认false
// writable:true,//控制属性是否可以被修改,默认false
configurable: true, //控制属性是否可以被删除,默认false
get: function () {
//当对象属性被读取时,会调用get函数,返回值就是属性的属性值
return number
},
set(value) {
//当对象属性被修改时,会调用set函数,且会收到修改的具体值
number = value
},
})
console.log(123, person)
Object.defineProperty的特别之处
- 使用Object.defineProperty添加的属性是淡色的,该属性在默认情况下不可被遍历(枚举),不可被修改,不可被删除
- 有get和set两个函数,会在获取和修改属性时被调用
补充:Object.keys()
console.log(666,Object.keys(person))
会将对象person的属性值拿出来形成数组(注意,它会将对象原型上定义的属性过滤掉,即不遍历原型上的属性)