属性特性:
- value 属性值
- writable 可修改值与否
- enumerable 可列举与否
- configurable 可删除与否
propertyName:属性名称,可以自定义,比如常见的name,age
属性描述对象:包含四大特性的对象
得到某属性的特性: Object.getOwnPropertyDescriptor(obj, propertyName);
哪一个对象的哪一个属性
修改某属性特性: Object.defineProperty(obj, propertyName, descriptor)
哪一个对象 哪一个属性 属性描述符对象
修改属性特性,就像是给自行车补胎,先找到是哪个自行车,然后找是前胎还是后胎,最后拿出“补胎胶”。
使用此方法时,如果属性存在,会更新其特性;
如果属性不存在,通过给定的特性和特性值来创建该属性,没有提供值的特性值默认为false
configurable:
false:
- 不能修改
configurable
标志。 - 不能修改
enumerable
标志。 - 不能将
writable: false
修改为true
(反过来则可以)。 - 不能修改访问者属性的
get/set
(但是如果没有可以分配它们)。 - 不能删除该属性
防止修改和删除属性特性,允许修改对象的值value。
一旦设置为不可设置,就不能再改回来。
1 let user = { 2 name: "John" 3 }; 4 5 Object.defineProperty(user, "name", { 6 writable: false, 7 configurable: false 8 }); 9 10 // 不能修改 user.name 或它的标志 11 // 下面的所有操作都不起作用: 12 user.name = "Pete"; 13 delete user.name; 14 Object.defineProperty(user, "name", { value: "Pete" });