Object.defineProperty参数以及用法
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]]一起使用
转载自:https://segmentfault.com/a/1190000041572932