用法:
给指定对象修改或添加属性
语法:
Object.defineProperty(obj, prop, descriptor)
参数:
obj:指定需要修改的对象
prop:属性名
descriptor:属性描述,对象表示
代码示例:
let obj1 = {
name:'zs',
age:15
}
let newObj = Object.defineProperty(obj1,'age',
{
value:6,
enumerable:true,
writable:false
})
console.log(newObj);
descriptor属性描述对象
{
value:'value',//属性值
enumerable:true,//可遍历
writable:true,//可修改
configurable:true,//可删除
get:(){},//访问该属性时触发
set:(){},//修改改属性时触发
}
注意!
value,writable 和 get,set属性不能一块使用
get属性表示对应属性被读取时候触发的方法,需要设置返回值表示该属性的值,如果不设置为undefined
set属性表示对应属性被修改时触发的方法,需要设置返回值,如果不设置为undefined
let obj1 = {
name:'zs',
age:15
}
let newObj = Object.defineProperty(obj1,'age',{value:6,enumerable:true,writable:false})
Object.defineProperty(obj1,'run',{
get:function(){
console.log('读取了值');
return '跑步'
},
set:(value)=>{
console.log('修改了值',value);
return value
}
})
console.log(obj1);
可以看到run的值并没有直接展示
读取该属性时,就会触发get方法,同时返回属性的值
当修改属性值的时候,会触发set方法
关于Object.defineProperty()的返回值
let obj1 = {
name:'zs',
age:15
}
let newObj = Object.defineProperty(obj1,'age',{value:6,enumerable:true,writable:false})
console.log(obj1===newObj);
console.log(newObj);
可以看出,该方法的返回值是被修改后的对象