1.数据属性
Configurable
设置属性是否可以通过delete删除,是否可以修改它的特性,是否可以把他改为访问器属性
let obj = {};
Object.defineProperty(obj,"value",{
configurable:false,
value:"123",
});
// 会报错,不能二次更改
Object.defineProperty(obj,"value",{
configurable:true,
value:"123",
});
console.log(obj.value); //"123"
delete obj.value; //如果是严格模式会报错
console.log(obj.value); //"123"
Enumerable
设置属性是否可以通过for-in循环返回
Writable
设置属性是否可以被修改
Value
设置属性的值
2.访问器属性
Configurable
同上
Enumerable
同上
Get
获取属性的函数
Set
写入属性的函数
ex:访问器属性无法直接定义,必须使用 Object.defineProperty()定义
let obj = {
myprivate_ = 1; //伪私有属性,加下划线表示不希望被外部访问
public = 2;
}
Object.defineProperty(obj,"newatt",{
get(){
return this.myprivate_; // 提供给外部访问私有属性值的方法
}
set(newVal){
this.myprivate_ = newVal;
this.public += newVal;
}
});
obj.newatt = 1; //自动调用set方法
console.log(obj.public); //3
3.同时定义多个属性
使用 Object.defineProperties()可以同时定义多个属性
let obj = {};
Object.defineProperties(obj,{
private_:{
value:1,
},
public:{
value:2,
}
newatt:{
get(){
return this.private_;
}
set(newVal){
this.private_ = newVal;
this.public += newVal;
}
}
});