什么是属性描述符
-
Property Descriptor 属性描述符,是一个普通对象,用于描述一个属性的相关信息;
-
通过
Object.getOwnPropertyDescriptor(对象, 属性名)
可以得到一个对象的某个属性的属性描述符:- value:属性值;
- configurable:该 属性的描述符 是否可以修改,默认值是 false;
- enumerable:该 属性 是否可以被枚举(for…in、Object.keys、Object.values),默认值是 false;
- writable:该 属性 是否可以被重新赋值,变成只读属性,默认值是 false;
-
如果需要为某个对象添加属性时、修改属性时,配置其属性描述符,可以使用下面的代码:
Object.defineProperty(对象, 属性名, 描述符); Object.defineProperties(对象, 多个属性的描述符);
Object.getOwnPropertyDescriptors(对象)
可以得到某个对象的所有属性描述符;
存取器属性
-
属性描述符中,如果配置了 get 和 set 中的任何一个,则该属性不再是一个普通属性,而变成了存取器属性;
-
get 和 set 配置均为函数,如果一个属性是存取器属性,则读取该属性时,会运行 get 方法,将 get 方法得到的返回值作为属性值;如果给该属性赋值,则会运行 set 方法;
let obj = { name: "zhangsan" } Object.defineProperty(obj, "age", { get() { return obj._age; }, set(val) { if (typeof val !== "number") { throw new TypeError("年龄必须是一个数字") } if (val < 0) { val = 0; } else if (val > 200) { val = 200; } obj._age = val; } }) obj.age = 12; console.log(obj.age);
-
存取器属性最大的意义,在于可以控制属性的读取和赋值;
属性描述符总结
-
拥有布尔值的键 configurable、enumerable 和 writable 的默认值都是 false;
-
属性值和函数的键 value、get 和 set 字段的默认值为 undefined;
-
如果一个描述符不具有 value、writable、get 和 set 中的任意一个键,那么它将被认为是一个数据描述符;如果一个描述符同时拥有 value 或 writable 和 get 或 set 键,则会产生一个异常;
计算机网络🛜 cookie
上一篇