我在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键入代码:)
答案 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