首页 > 解决方案 > 覆盖 es6 类实例的 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;
  }
}

标签: ecmascript-6getter

解决方案


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

推荐阅读