我有A
类,它是B
类的父类
class A {
constructor(a){
this.a=a;
}
par(){
console.log("para");
}
}
class B extends A {
constructor(a) {
super(a)
this.a = "child";
}
par() {
super.par();
console.log("child");
}
}
使用此代码时,它可以正常工作。
但是当我使用以下代码在par
上明确定义B
函数时:
B.prototype.par = function() {
super.par();
}
我得到了错误
未捕获的SyntaxError:'super'关键字在此处意外
无论我们是在类定义中还是在function('class')的原型对象中创建函数,它都应该是同一件事。 我在这里做什么错了?
答案 0 :(得分:1)
'super'只是在ES2015中引入的语法糖以及类语法。 它只能在扩展另一个类的'class'函数(构造函数和方法)中使用。
class A {
constructor(){}
par(){ console.log('para') }
}
class B extends A {
constructor(){
super()
}
}
等效于:
function A(){}
A.prototype.par = function(){console.log('para')}
var B = (function(parent){
var _super = parent;
function B(){
_super.call(this); // calls parent's constructor
}
B.prototype = Object.create(_super.prototype); // Inherits parent's methods.
B.prototype.par = function(){ // override parent's par.
_super.prototype.par.call(this); // child still has access to parent's par method thanks to closure :)
console.log('child');
}
return B;
})(A);
var b = new B();
b.par()
您不能这样做:
function(){
super // super is not defined...
}
答案 1 :(得分:-1)
它为我工作。我认为您的代码实现没有问题。除了下面的实例创建和方法调用之外,相同的代码没有更改
var x = new B();
x.par();
class A{
constructor(a){
this.a=a;
}
par(){
console.log("para");
}
}
class B extends A{
constructor(a){
super(a)
this.a="child";
}
par(){
super.par();
console.log("child");
}
}
var x = new B();
x.par();