Object.defineProperty()用来给对象定义新属性或改变对象现有属性
Object.defineProperty(obj,prop,desc)
//obj: 目标对象
//prop: 属性
//desc: 目标属性所拥有的特性(对象形式)
对象描述
1.value
设置属性的值,如果不设置,默认为undefined
let obj = {};
//未设置属性值
Object.defineProperty(obj, 'a', {})
console.log(obj);//{a: undefined}
//设置属性值
Object.defineProperty(obj, 'a', {
value: 1
})
console.log(obj);//{a: 1}
2.writable
属性的值是否可改变,如果不设置,默认为false(不可变)
let obj = {};
//未设置writable
Object.defineProperty(obj, 'a', {
value: 1
})
obj.a = 2;
console.log(obj.a);//1
//设置writable为true
Object.defineProperty(obj, 'a', {
value: 1,
writable: true
})
obj.a = 2;
console.log(obj.a);//2
3.enumerable
属性是否可枚举(使用for…in…或Object.keys()),默认为false(不可枚举)
let obj = {};
//未设置enumerable
Object.defineProperty(obj, 'a', {
value: 1,
writable: true
})
for(let key in obj){
console.log(key);//未输出
}
//设置enumerable
Object.defineProperty(obj, 'a', {
value: 1,
writable: true,
enumerable: true
})
for(let key in obj){
console.log(key);//a
}
console.log(Object.keys(obj));//["a"]
//Object.keys()返回对象的可枚举属性组成的数组
3.configurable
属性是否可删除,默认为false(不可删除)
let obj = {};
//未设置configurable
Object.defineProperty(obj, 'a', {
value: 1,
writable: true,
enumerable: true
})
delete obj.a;
console.log(obj);//{a: 1}
//设置configurable
Object.defineProperty(obj, 'a', {
value: 1,
writable: true,
enumerable: true,
configurable: true
})
delete obj.a;
console.log(obj);//{}