所以我测试了这段代码:
class C1 {}
C1.prototype. f =function(){ return 1 }
class C2 extends C1 {}
C2.prototype. f =function(){ return super.f()+1 }
它会抛出一个语法错误:“super”关键字在这里意外。
但是如果我这样做:
C2.prototype. f =function(){ return Object.getPrototypeOf(this.constructor.prototype).f() + 1 }
它确实返回 2!
那么有人知道为什么“超级”不起作用吗?我看不出有什么理由。
谢谢!
super
是一个 keyword
,意味着它必须被口译员接受,目前只有 class
可以使用它。如果你想要同样的效果,你必须备份你的方法或远程参考它:
class C1 {}
C1.prototype. f =function(){ return 1 }
class C2 extends C1 {}
C2.prototype. f =function(){ return C1.prototype.f.call(this)+1 }