JavaScript 本质上是存储键值对的数据结构,但是与 map 和 dictionary 不同的是,JavaScript 对象是高度可配置的。
当创建一个对象时,并给这个对象添加属性时,每个属性都会有一个默认的与之关联的 property descriptor,property descriptor 是一个 javascript 对象,包含了对应属性的一些信息,例如 value。
Object.getOwnPropertyDescriptor #为了获得属性的 property descriptor,可以通过 Object 的静态方法 Object.getOwnPropertyDescriptor。
Object.getOwnPropertyDescriptor(obj, prop);
Object.getOwnPropertyDescriptor 返回的对象就是 property descriptor,property descriptor包含了以下几个属性用来描述与之关联的对象属性:
value:属性的当前值writable:表示是否允许给属性赋值enumerable:表示属性是否可枚举, true 表示该属性是可枚举属性,那么这个属性会在 for in 和 for of 循环或者 object.keys 中出现。configurable:表示属性是否可配置,true 表示用户有权限改变该属性的 property descriptor 中的值,例如 writable 和 enumerable 的值, false 则表示不可配置,无权限。Object.defineProperty #可以通过 Object.defineProperty 给对象定义一个新的属性或者更新一个已存在属性的 descriptor。
var myObj = {
p1: 1,
p2: 2
};
Object.defineProperty(myObj, "p1", {
writable: false
});
// TypeError: Cannot assign to read only property "p1" of object
myObj.p1 = 2;
(完)