super是javascript类继承中访问父类构造函数和方法的关键字,必须在子类构造函数中先调用super()才能使用this,在实例或静态方法中可用super.methodname()调用父类对应成员。

在 JavaScript 的类继承中,super 是访问父类构造函数和方法的关键字。它只能在子类的构造函数(constructor)或实例/静态方法中使用,且必须在使用 this 之前调用 super()(在构造函数中)。
在子类构造函数中调用父类构造函数
子类构造函数中必须显式调用 super(),否则无法使用 this。这会初始化父类的实例属性,并建立原型链关系。
例如:
class Animal {
constructor(name) {
this.name = name;
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // 必须先调用,把 name 传给父类构造函数
this.breed = breed;
}
}
在实例方法中调用父类同名方法
当子类重写了父类方法,又需要复用父类逻辑时,可在方法体内用 super.methodName() 调用父类版本。
例如:
class Animal {
speak() {
return `${this.name} makes a sound.`;
}
}
class Dog extends Animal {
speak() {
return super.speak() + ' But also barks!'; // 复用父类逻辑再扩展
}
}
const dog = new Dog('Buddy');
console.log(dog.speak()); // "Buddy makes a sound. But also barks!"
在静态方法中调用父类静态方法
super 同样适用于静态方法,通过 super.staticMethod() 访问父类静态成员。
例如:
class Animal {
static info() {
return 'An animal.';
}
}
class Dog extends Animal {
static info() {
return super.info() + ' Specifically, a dog.';
}
}
console.log(Dog.info()); // "An animal. Specifically, a dog."
注意事项和常见错误
-
super不是对象,不能赋值给变量(如const parent = super会报错) - 在构造函数中,必须先调用
super()才能访问this,否则报ReferenceError -
super只能在派生类(即用了extends的类)中使用;在顶层类或普通函数中无效 -
super在箭头函数中不可用,因为箭头函数没有自己的this和super绑定
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











