JavaScript 属性描述符

属性描述符(Property Descriptor)是 ES5 以后出现的概念,顾名思义,它用于描述属性应该是什么样,例如是否只读,可否枚举,可否可配置等。全部对象属性都可使用属性描述符来定义。函数

属性描述符的六个属性

  • valueprototype

    • 属性值。
  • writablecode

    • 是否容许赋值,true 表示容许,不然该属性不容许赋值。
  • get对象

    • 返回属性值的函数。若是为 undefined 则直接返回描述符中定义的 value 值。
  • setip

    • 属性的赋值函数。若是为 undefined 则直接将赋值运算符右侧的值保存为属性值。
  • configurableget

    • 若是为 true,则表示该属性能够从新定义描述符,或者从属性的宿主删除。缺省为 true
  • enumerableit

    • 若是为 true,则表示遍历宿主对象时,该属性能够被遍历到。缺省为 true

Object 操做属性的方法

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

    • 使用描述符 descriptor 定义 objprop 属性。
  • Object.getOwnPropertyDescriptor(obj, prop)event

    • 获取 objprop 属性描述符。
  • Object.preventExtensions(obj)table

    • 禁止为当前对象 obj 添加新属性。
  • Object.seal(obj)

    • 封印当前对象 obj,禁止添加新属性,而且将全部现有属性 configurable 设置为 false
  • Object.freeze(obj)

    • 冻结当前对象 obj,禁止增长新属性,禁止删除现有属性或修改属性描述符,至关于将该 obj 变成了 immutable
  • Object.isExtensible(obj)

    • 判断当前对象 obj 是否容许扩展。
  • Object.isSealed(obj)

    • 判断当前对象 obj 是否被封印。
  • Object.isFrozen(obj)

    • 判断当前对象 obj 是否被冻结。
  • Object.prototype.hasOwnProperty(prop)

    • 判断当前对象是否拥有 prop 属性。