Object.definePropery(obj, prop, desc)
//- obj 需要定义属性的对象
//- prop要定义的属性名
//- desc 属性描述符号
作用
- 直接在对象上定义或者修改属性
- 通过描述符的设置可以精准的控制对象的属性
为对象定义属性有两种方式:属性描述符和存取描述符
属性描述符
特有的两个属性(value.writable)
let Person = {}
Object.definePropery(Person, 'name', {
value: 'zifeiyu',
writable: true // 是否可以改变
})
总结
configrable : false
:不能删除属性,不能重新定义属性描述符(有一个小小的意外:可以把writable的状态由true改为false,但是无法由false改为true),但是在writable: true的情况下,可以改变value的值
configrable: false && writable:true
:不能删除属性,通过属性定义和通过赋值的形式都可以修改属性的值
configrable: true && writable:false
: 通过属性定义的形式可以修改属性值,通过赋值的形式不可以修改
configrable: false && writable:false
: 不可删除,不可重新赋值,但可以赋值添加新属性,不可以重新定义属性
存取描述符
一对 getter、setter 函数功能来描述的属性
let Person = {}
let temp = null
Object.defineProperty(Person, 'name', {
get: function () {
return temp
},
set: function (val) {
temp = val
}
})
Person.name = 'zifeiyu'
console.log(Person.name) // zifeiyu
数据描述符合存取描述符共有的描述符
-
configrable
描述属性是否配置,以及可否删除 -
enumerable
描述属性是否会出现在for in 或者 Object.keys()的遍历中
描述符可同时具有的键值
configurable | enumerable | value | writable | get | set |
---|---|---|---|---|---|
Yes | Yes | Yes | Yes | No | No |
Yes | Yes | No | No | Yes | Yes |