1、Object.defineProperty()用法
object.defineProperty()办法会间接在指定对象上定义一个新的属性,或者批改一个已有属性
2、参数、返回值详解
Object.defineProperty(object, prop, descriptor)
一共能够承受三个参数:
object:指标对象
prop:指标对象中的属性名
desriptor:要进行定义或者批改的属性描述符
返回值:传递给函数的对象
3、属性描述符
一共有两种属性描述符:数据属性描述符、存取属性描述符
configurable | enumerable | value | writable | get | set | |
---|---|---|---|---|---|---|
数据属性描述符 | 能够 | 能够 | 能够 | 能够 | 不能够 | 不能够 |
存取属性描述符 | 能够 | 能够 | 不能够 | 不能够 | 能够 | 能够 |
数据属性描述符:
1、[[configurable]]: 示意属性是否能够通过 delete 删除,是否能够批改个性,是否能够将它批改为存取属性(1)当咱们间接在一个对象上定义某个属性时,它的默认值是 true(2)而当咱们通过属性描述符进行定义属性时,它的默认值是 false
2、[[enumerable]]: 示意属性是否能够通过 for-in 或者 Object.keys 返回属性(1)当咱们间接在一个对象上定义某个属性时,他的默认值是 true(2)而当咱们通过属性描述符进行定义属性时,他的默认值是 false
3、[[writable]]:示意是否能够批改属性(1)当咱们间接在一个对象上定义某个属性时,他的默认值是 true(2)而当咱们通过属性描述符进行定义属性时,他的默认值是 false
4、[[value]]: 属性的 value 值,当读取属性时会返回 value,批改属性时会批改 value(1)默认状况下 value 是 undefined
存取属性描述符:
1、[[configurable]]: 示意属性是否能够通过 delete 删除,是否能够批改个性,是否能够将它批改为存取属性(1)当咱们间接在一个对象上定义某个属性时,它的默认值是 true(2)而当咱们通过属性描述符进行定义属性时,它的默认值是 false
2、[[enumerable]]: 示意属性是否能够通过 for-in 或者 Object.keys 返回属性(1)当咱们间接在一个对象上定义某个属性时,他的默认值是 true(2)而当咱们通过属性描述符进行定义属性时,他的默认值是 false
3、[[get]]: 获取属性时执行的函数,默认为 undefined
4、[[set]]: 设置或者批改属性值时执行的函数,默认为 undefined
3、属性描述符的抵触
[[writable]]、[[value]]不能和 [[get]]、[[set]] 一起应用