const student = {
name:"张三",
age:18
}
const name = Object.getOwnPropertyDescriptor(student,'name')
console.log(name)
// {
// value: '张三', // 属性值
// writable: true, //是否可以修改
// enumerable: true, // 是否可以枚举
// configurable: true // 是否能配置
// }
// 删除name属性
delete student.name
console.log(student); // {age:18} 被删除了
Object.defineProperty(student,"gender",{
value:'男',
writable:true,
configurable:false,
emumerable:true
});
console.log(student); // {age:18,gender:'男'}
delete student.gender
console.log(student); // {age:18,gender:'男'} 无法被删除
Object.defineProperty(student,"age",{
value:18,
writable:false,
configurable:true,
emumerable:true
});
student.age = 19
console.log(student); // {age:18,gender:'男'} 无法被修改
for(let key in student){
console.log(key) // age 其中gender无法操作了
}
Object.defineProperty(student,"address",{
value:'北京',
writable:true,
configurable:true,
emumerable:false
});
console.log(student) // {age: 18, gender: '男', address: '北京'} 虽然可以打印,但是无法枚举
for(let key in student){
console.log(key) // age
}
总结:
- Object.defineProperty(...) 来添加一个新属性或者修改一个已有属性(如果是configurable) 并对特性进行设置
- getOwnPropertyDescriptor获取指定对象的自身属性描述符。自身属性描述符是指直接在对象上定义
// value: '张三', // 属性值
// writable: true, //是否可以修改
// enumerable: true, // 是否可以枚举
// configurable: true // 是否能配置