属性

属性的一些性质

使用这个API可以让我们呢更加精确的定义一个属性。

存取描述符

get
属性的 getter 函数,如果没有 getter,则为undefined。当访问该属性时,会调用此函数。执行时不传入任何参数,但是会传入this对象(由于继承关系,这里的this并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。默认为undefined
set
属性的 setter 函数,如果没有 setter,则为undefined。当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予的新值),会传入赋值时的this对象。默认为undefined

  1. const obj = {};
  2. let value = 0;
  3. Object.defineProperty(obj, "value", {
  4. enumerable: false,
  5. configurable: false,
  6. get() {
  7. return value
  8. },
  9. set(v) {
  10. value = v
  11. }
  12. })

数据描述符

configurable
当且仅当该属性的configurable键值为true时,该属性的描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为false
enumerable
当且仅当该属性的enumerable键值为true时,该属性才会出现在对象的枚举属性中。默认为false
数据描述符还具有以下可选键值:
value
该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为undefined
writable
当且仅当该属性的writable键值为true时,属性的值,也就是上面的value,才能被赋值运算符改变。默认为false。

  1. const obj = {};
  2. Object.defineProperty(obj, "value", {
  3. enumerable: false,
  4. configurable: false,
  5. value: 1,
  6. writable: true,
  7. })