ES6中class语法糖的super关键字
在ES6(ECMAScript 2015)中,class 是一种语法糖,用于定义类和实现继承。super 关键字在类继承中扮演着重要的角色,它用于调用父类的构造函数或方法。
构造器中的 super
当你在子类中定义构造函数时,通常需要调用父类的构造函数来确保父类的初始化逻辑被执行。super 关键字用于这个目的。
示例
假设我们有一个父类 Animal 和一个子类 Dog,Dog 继承自 Animal:
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a sound.`);
}
}
class Dog extends Animal {
constructor(name, breed) {
// 调用父类的构造函数
super(name);
this.breed = breed;
}
speak() {
console.log(`${this.name} barks.`);
}
}
const dog = new Dog('Rex', 'Golden Retriever');
dog.speak(); // 输出: Rex barks.
console.log(dog.name); // 输出: Rex
console.log(dog.breed); // 输出: Golden Retriever在这个例子中:
Dog类通过extends关键字继承了Animal类。- 在
Dog类的构造函数中,super(name)调用了Animal类的构造函数,并将name传递给它。这样,Dog实例的name属性就被正确初始化了。 Dog类还定义了自己的speak方法,覆盖了Animal类中的speak方法。
注意事项
- 必须在子类构造函数中调用
super:在子类的构造函数中,必须在使用this关键字之前调用super。这是因为super负责初始化this。 - 继承静态方法:
super也可以用来调用父类的静态方法。
示例:继承静态方法
class Animal {
static species() {
return 'Animal';
}
}
class Dog extends Animal {
static species() {
return super.species() + ' Dog';
}
}
console.log(Dog.species()); // 输出: Animal Dog在这个例子中,Dog 类通过 super.species() 调用了 Animal 类的静态方法 species。
总结来说,super 关键字在类继承中用于调用父类的构造函数或方法,确保子类能够正确初始化和继承父类的属性和方法。