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;
(完)