配置对象的属性


在 JavaScript 中,对象是通过属性描述(property descriptor)进行描述的,我们可以 配置以下关键字。 ● configurable —— 如果设为 true,则可以修改或删除属性。如果设为 false,则 不允许修改。 ● enumerable —— 如果设为 true,则可在 for-in 循环对象属性时出现(我们很快 会介绍 for-in 循环)。 ● value —— 指定属性的值,默认为 undefined。 ● writable —— 如果设为 true,则可通过赋值语句修改属性值。 ● get —— 定义 getter 函数,当访问属性时发生调用,不能与 value 与 writable 同 时使用。 ● set —— 定义 setter 函数,当对属性赋值时发生调用,也不能与 value 与 writable 同时使用   通过简单赋值语句创建对象属性,例如: ninja.name = "Yoshi"; 该赋值语句创建的属性可被修改或删除、可遍历、可写,Ninja 的 name 属性值被设 7.3 实现继承 185 置为 Yoshi,get 和 set 函数均为 undefined。 如果想调整属性的配置信息,我们可以使用内置的 Object.defineProperty 方法,传入 3 个参数:属性所在的对象、属性名和属性描述对象。查看清单 7.9 中的示例代码。 清单 7.9 配置属性
var ninja = {};
ninja.name = "Yoshi";
ninja.weapon = "kusarigama";
Object.defineProperty(ninja, "sneaky", {
  configurable: false,
  enumerable: false,
  value: true,
  writable: true
});
assert("sneaky" in ninja, "We can access the new property");
for(let prop in ninja){
  assert(prop !== undefined, "An enumerated property: " + prop);
}
首先创建一个空对象,再通过传统赋值语句添加两个属性:name 与 weapon。接着, 使用内置 Object.defineProperty 方法定义属性 sneaky,属性描述为不可配置、不可枚举、 属性值为 true。由于属性 sneaky 是可写的,所以可被改变。