日期:2022年4月30日标签:JavaScript

JavaScript 对象的 Property Descriptor #

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 infor of 循环或者 object.keys 中出现。
  • configurable:表示属性是否可配置,true 表示用户有权限改变该属性的 property descriptor 中的值,例如 writableenumerable 的值, 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;

(完)

目录