Object.defineProperty()

该方法允许精确添加或修改对象的属性.

Object.defineProperty(obj, prop, descriptor)
  • obj:

要在其上定义属性的对象。

  • prop:

要定义或修改的属性的名称。

  • descriptor:

将被定义或修改的属性描述符。

---------------------------------------------------------------------------------------------------

属性描述符(特性):

  • configurable:可配置性,控制着其描述的属性的修改,表示能否修改属性的特性,能否把属性修改为访问器属性,或者能否通过delete删除属性从而重新定义属性。默认值为true

  • enumerable:可枚举性,表示能否通过for-in遍历得到属性。默认值为true

  • writable:可写性,表示能否修改属性的值。默认值为true

  • value数据属性,表示属性的值。默认值为undefined

除了上面的属性,还有两个存取器属性分别是getset,可以代替valuewritable

  • get:在读取属性时调用的函数。只指定get则表示属性为只读属性。默认值为undefined

  • set:在写入属性时调用的函数。只指定set则表示属性为只写属性。默认值为undefined

 

描述符可同时具有的键值

  configurable enumerable value writable get set
数据描述符 Yes Yes Yes Yes No No
存取描述符 Yes Yes No No Yes Yes

如果一个描述符不具有value,writable,get set 任意一个关键字,那么它将被认为是一个数据描述符。如果一个描述符同时有(value或writable)(get或set)关键字,将会产生一个异常。

数据描述符:


// 在对象中添加一个属性与数据描述符的示例
Object.defineProperty(o, "a", {
  value : 37,
  writable : true,
  enumerable : true,
  configurable : true
});

存取描述符:

Object.defineProperty(o, "b", {
  get : function(){
    return bValue;
  },
  set : function(newValue){
    bValue = newValue;
  },
  enumerable : true,
  configurable : true
});

 

你可能感兴趣的:(JavaScript乱七八糟)