可以在子类方法中使用“超级”来调用超类的相应方法而无需直接引用吗?

时间:2016-05-05 22:26:59

标签: javascript ecmascript-6

我在a tutorial中看到了一个看起来很奇怪的“超级”用法。 super()在子类的方法get()内用于调用超类的方法get(),而不使用任何访问符号。那会有用吗?如果是,我在哪里可以找到更多关于它的参考资料?

编辑:

class Answer {
  constructor(value) {
    this._val = value;
  }
  get() {
    return this._val;
  }
}

class FirmAnswer extends Answer {
  constructor(value) {
    super(value);
  }

  get() {
    return super() + '!!';
  }
}
var luckyAnswer = new FirmAnswer(7);
luckyAnswer.get();

感谢@FlexiKling和@sorenymous键入代码:)

2 个答案:

答案 0 :(得分:4)

不,直接super调用(没有属性)仅在构造函数中允许,并且在其他地方构成语法错误。它必须是super.get()

您引用的教程是从2013年开始的。在早期版本的类语法提案中,这个表单确实可行。但是,它已在Draft Rev 28 (October 14, 2014 )中删除:

  没有紧随其后的属性说明符的

现在在所有MethodDefinition中都是非法的(不再使用当前方法名称隐式超级)

答案 1 :(得分:1)

我测试了你的代码并且它产生了语法错误。

class Answer {
  constructor(value) {
    this._val = value;
  }
  get() {
    return this._val;
  }
}

class FirmAnswer extends Answer {
  constructor(value) {
    super(value);
  }

  get() {
    return super() + '!!';
  }
}
var luckyAnswer = new FirmAnswer(7);
luckyAnswer.get();

控制台输出:

Uncaught SyntaxError: 'super' keyword unexpected here