1.属性描述符
作用:可以精准的添加或修改对象的属性
Object.defineProperty
1.定义
Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象
Object.defineProperty(obj,prop,descriptor)
可接收三个参数
- obj: 要定义属性的对象
- prop: 要定义或修改的属性的名称或symbol
- descriptor: 要定义或修改的属性描述符
2.分类
1.数据属性描述符
特征属性
-
Configurable:表示属性是否可以通过delete删除属性,是否可以修改它的特性,或者是否可以将它修改为存取属性描述符;
- 当我们直接在一个对象上定义某个属性时,这个属性的[Configurable]]为true
- 当我们通过属性描述符定义一个属性时,这个属性的IConfigurable]]默认为false;
-
Enumerable: 表示属性是否可以通过for-in或Object.keys()返回该属性(译为不可枚举)
- 同上
-
Writable: 表示是否可以修改属性的值(是否为只读属性 readonly)
- 同上
-
value:属性的value值,读取属性时会返回该值,修改属性时,会对其进行修改
-
默认情况下这个值时undefined
示例 Object.defineProperty(obj,"name",{ configurable:false, //obj的name属性不可以被删除 enumerable:false, //obj的name属性不可以枚举 writable:false, //obj的name属性不写入(只读属性) value:"coderwhy" //读取时返回的值 })
-
2.存取属性描述符
特征属性
-
Configurable:同上
-
Enumerable:同上
-
get:获取属性时会执行的函数,默认为undefined
-
set:设置属性时会执行的函数,默认为undefined
示例: Object.defineProperty(obj,"name",{ configurable:true, enumerable:false, set:function(val){ console.log("set方法被调用了",val) }, get:function(){ console.log("get方法被调用了") } })