1、Object.defineProperty()用法

object.defineProperty()办法会间接在指定对象上定义一个新的属性,或者批改一个已有属性

2、参数、返回值详解

Object.defineProperty(object, prop, descriptor)

一共能够承受三个参数:
object:指标对象
prop:指标对象中的属性名
desriptor:要进行定义或者批改的属性描述符

返回值:传递给函数的对象

3、属性描述符

一共有两种属性描述符:数据属性描述符、存取属性描述符

configurableenumerablevaluewritablegetset
数据属性描述符能够能够能够能够不能够不能够
存取属性描述符能够能够不能够不能够能够能够

数据属性描述符:

1、[[configurable]]:示意属性是否能够通过delete删除,是否能够批改个性,是否能够将它批改为存取属性    (1)当咱们间接在一个对象上定义某个属性时,它的默认值是true    (2)而当咱们通过属性描述符进行定义属性时,它的默认值是false2、[[enumerable]]:示意属性是否能够通过for-in或者Object.keys返回属性    (1)当咱们间接在一个对象上定义某个属性时,他的默认值是true    (2)而当咱们通过属性描述符进行定义属性时,他的默认值是false3、[[writable]]:示意是否能够批改属性    (1)当咱们间接在一个对象上定义某个属性时,他的默认值是true    (2)而当咱们通过属性描述符进行定义属性时,他的默认值是false4、[[value]]:属性的value值,当读取属性时会返回value,批改属性时会批改value    (1)默认状况下value是undefined

存取属性描述符:

1、[[configurable]]:示意属性是否能够通过delete删除,是否能够批改个性,是否能够将它批改为存取属性    (1)当咱们间接在一个对象上定义某个属性时,它的默认值是true    (2)而当咱们通过属性描述符进行定义属性时,它的默认值是false2、[[enumerable]]:示意属性是否能够通过for-in或者Object.keys返回属性    (1)当咱们间接在一个对象上定义某个属性时,他的默认值是true    (2)而当咱们通过属性描述符进行定义属性时,他的默认值是false3、[[get]]:获取属性时执行的函数,默认为undefined4、[[set]]:设置或者批改属性值时执行的函数,默认为undefined

3、属性描述符的抵触

[[writable]]、[[value]]不能和[[get]]、[[set]]一起应用