覆盖es6类实例的getter

时间:2018-09-19 15:42:31

标签: ecmascript-6 getter

在此示例中,我尝试使用缓存的值覆盖getter。

它不起作用。

是否可以覆盖类实例的getter?

class Module {
  constructor(id) {
    this.id = id
  }
  get element() {
    const elm = document.getElementById(id)
    if(!elm) throw new Error(`#${id} is not in document`)
    delete this.element;
    this.element = elm;
    return elm;
  }
}

1 个答案:

答案 0 :(得分:2)

您应该使用Object.defineProperty()

class Module {
  constructor(id) {
    this.id = id
  }
  get element() {
    const elm = document.getElementById(this.id)
    if(!elm) throw new Error(`#${id} is not in document`)
    Object.defineProperty(this, 'element', {
      value: elm,
    });
    return elm;
  }
}