如何在超级之前使用这个?

时间:2016-12-08 08:28:08

标签: ecmascript-6

我知道this之前不允许super,但我需要这样做。我想知道在es6中是否有合法的方法可以做到这一点?

我的代码:

class DOMElement {
  constructor(aNodeName) {
    this.name = aNodeName;
    this.create();
  }
  create() {
    let domref = document.createElement(this.name);
    document.body.appendChild(domref);
    return domref;
  }
}

class Button extends DOMElement {
  constructor(aLabel) {
    this.label = aLabel;
    super('button');
  }
  create() {
    let domref = super.create();
    domref.textContent = this.label;
  }
}

如果我在this.label中致电super('button')之前未设置Button.prototype.create,则domref.textContent设置为undefined

1 个答案:

答案 0 :(得分:2)

没有'合法'的方式。

在构造中父类应该使用静态属性值的情况下,它可以是一个getter:

get label() {
  return 'label';
}

在这种情况下,这意味着课堂设计是错误的。在父类中没有任何东西可以施加这样的限制。实际上,label仅供子类使用。它应该是:

  constructor(aLabel) {
    super('button');
    this._domref.textContent = alabel;
  }
  create() {
    // if parent class is user-defined, it should be done there
    // instead of returning a value, because it doesn't make sense
    // to leave an important part of the object without a reference
    this._domref = super.create();
  }