2、对象属性 - WHB1/JavaScript GitHub Wiki

1、对象数据属性

  • Configurable:表示能否通过 delete 删除属性从而重新定义属性,
    能否修改属性的特性,或者能否把属性修改为访问器属性
  • Enumerable:表示能否通过 for-in 循环返回属性
  • Writable:表示能否修改属性的值
  • Value:包含这个属性的数据值。读取属性值的时候,从这个位置读;
    写入属性值的时候,把新值保存在这个位置。
    这个特性的默认值为 undefined

对象数据属性与声明对象方式关系

方式 创建object的实例 对象字面量
Configurable true true
Enumerable true true
Writable true true
Value 特定值 特定值

Object.defineProperty()方法

  • 此方法作用:要修改属性默认的特性
      var person = {};
      Object.defineProperty(person, "name", {
            writable: false,
            value: "Nicholas"
      });
      alert(person.name); //"Nicholas"
      person.name = "Greg";
      alert(person.name); //"Nicholas"

----

      var person = {};
      Object.defineProperty(person, "name", {
            configurable: false,
            value: "Nicholas"
      });
      alert(person.name); //"Nicholas"
      delete person.name;
      alert(person.name); //"Nicholas"

      一旦把属性定义为不可配置的,就不能再把它变回可配置了

      var person = {};
      Object.defineProperty(person, "name", {
             configurable: false,
             value: "Nicholas"
      });
      //抛出错误
     Object.defineProperty(person, "name", {
             configurable: true,
             value: "Nicholas"
      });

     在调用 Object.defineProperty()方法时, 如果不指定,  configurable、 enumerable 和writable 特性的默认值都是 false。


2、对象访问器属性

访问器属性不包含数据值;
它们包含一对儿 getter 和 setter 函数(不过,这两个函数都不是必需的)。 在读取访问器属性时,会调用 getter 函数,这个函数负责返回有效的值; 在写入访问器属性时,会调用setter 函数并传入新值,这个函数负责决定如何处理数据。 访问器属性有如下 4 个特性。

  • Configurable:表示能否通过 delete 删除属性从而重新定义属性, 能否修改属性的特性, 或者能否把属性修改为数据属性。 对于直接在对象上定义的属性,这个特性的默认值为true。
  • Enumerable:表示能否通过 for-in 循环返回属性。 对于直接在对象上定义的属性,这个特性的默认值为 true。
  • Get:在读取属性时调用的函数。默认值为 undefined。
  • Set:在写入属性时调用的函数。默认值为 undefined。

**注意:**访问器属性不能直接定义,必须使用 Object.defineProperty()来定义