一.基本用法
Object.defineProperty()方法是给对象添加属性用的
Object.defineProperty(object, propertyname, descriptor);
其中三个参数分别是:
object:对象
propertyname:属性名
descriptor:要添加的属性值
let person = {
name: '张三',
sex: '男'
}
Object.defineProperty(person, 'age', {
value: 18, //这个age不能被枚举(不能遍历)
})
console.log(person);
输出的结果如下:
这个age和name、sex的颜色是不一样的,它不能被枚举(不能遍历)。
Object.defineProperty()方法添加的属性默认是不能修改、删除、遍历,但可以通过修改一些默认值设置是否可修改、删除、遍历。
let person = {
name: '张三',
sex: '男'
}
Object.defineProperty(person, 'age', {
value: 18, //这个age不能被被枚举(不参与遍历)
enumerable: true, //控制属性是否可以枚举,默认为false
writable: true, //控制对象是否可修改
configurable: true //控制属性是否可以被删除
})
二.Object.defineProperty()中的高级配置项
get
let number = 18;
let person = {
name: '张三',
sex: '男'
}
Object.defineProperty(person, 'age', {
//当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
get: function () {
return number
}
})
这个age值不能直接被看到,点开(…)才能看到,且每一次访问age,都会触发get函数的调用。
set
Object.defineProperty(person, 'age', {
//当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
set: (value){
console.log(value);
number = value;
}
})
修改age