JavaScript 中 class 语法怎么使用 super
在 javascript 的类继承中,super 关键字用于调用父类的构造函数和方法。在子类构造函数中,必须在使用 this 之前调用 super() 以完成初始化;在静态方法或实例方法中,则可以直接通过 super.methodname() 访问父类逻辑。

子类构造函数中 super() 的调用时机与参数传递
在子类的构造函数中,super() 必须在访问 this 之前被调用,否则会导致引用错误。它负责执行父类的构造函数逻辑并返回父类实例,随后子类才能继续定义自己的属性。

class Animal {
constructor(name) {
this.name = name;
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // 必须先调用 super
this.breed = breed;
}
}
const dog = new Dog('Rex', 'Labrador');
console.log(dog.name); // Rex
console.log(dog.breed); // Labrador子类方法中 super.method() 的调用方式
在子类的方法中,可以使用 super.methodName() 来调用父类中同名的方法。这通常用于扩展父类行为,即在调用父类原有逻辑的基础上增加新的功能。
立即学习“Java免费学习笔记(深入)”;

class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
class Dog extends Animal {
constructor(name) {
super(name);
}
speak() {
super.speak(); // 调用父类方法
console.log(`${this.name} barks.`);
}
}
const dog = new Dog('Rex');
dog.speak();
// Rex makes a noise.
// Rex barks.super 在非构造函数和非方法上下文中的限制
super 关键字只能在类的构造函数、实例方法和静态方法中使用。如果在普通函数、箭头函数或非类上下文中使用,会抛出语法错误。此外,在子类构造函数中,如果不调用 super() 而直接尝试访问 this,也会引发运行时错误。


















