覆盖 es6 class 实例的 getter

overwrite getter of es6 class instance

在这个例子中,我尝试用缓存值覆盖 getter。

没用。

是否可以覆盖 class 实例的 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;
  }
}

你应该使用 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;
  }
}