Object.defineProperty()
该方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象
语法:Object.defineProperty(obj, prop, descriptor)
参数 obj:要定义属性的对象
参数 prop:要定义或修改的属性的名称
参数 descriptor:要定义或修改的属性描述符
描述符:
configurable:可配置性,表示能否修改属性的特性( 比如 delete obj.key )。默认值为 true
enumerable:可枚举性,表示能否通过 for in 循环访问属性,默认值为 true
writable:可读写性:表示能否修改属性的值。默认值为 true
value:包含这个属性的数据值。默认值为 undefined
get:属性的 getter 函数,如果没有 getter,则为 undefined。当访问该属性时,会调用此函数
set:属性的 setter 函数,如果没有 setter,则为 undefined。当属性值被修改时,会调用此函数
var obj = {
key: 1,
number: 2
};
Object.defineProperty(obj, "key", {
configurable: true,
enumerable: true,
writable: true,
value: 1,
get(){
return this.key
},
set(newKey){
if(newKey > 1993){
this.key = newKey;
this.number++
}
}
});
Object.defineProperties()
// 定义多个属性
let student = {};
Object.defineProperties(student, {
name:{
configurable: true,
enumerable: true,
writable: true,
value: '张三'
},
age: {
writable: true,
value: 16
},
sex: {
get(){
return '男';
},
set(v){
p1.sex = v;
}
}
})
p1.sex = "男";
console.log(student.name + ":" + student.age); // 张三:16
console.log(p1.sex); // 男
student.sex = "女";
console.log(student.sex); //男
console.log(p1.sex); // 女
Object.getOwnPropertyDescriptor()
该方法返回指定对象上一个自有属性对应的属性描述符
let person = {
name: '张三',
age: 18
}
let desc = Object.getOwnPropertyDescriptor(person, 'name');
console.log(desc) 结果如下
// {
// configurable: true,
// enumerable: true,
// writable: true,
// value: "张三"
// }
Object. getOwnPropertyDescriptors()
所指定对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象
let person = {
name: '张三',
age: 18
}
let desc = Object.getOwnPropertyDescriptors(person, 'name');
console.log(desc)
//{
// configurable: true,
// enumerable: true,
// value: '张三',
// writable: true
//}
网友评论