博主头像
<CodeEra />

心存敬畏 行有所止

ES6中class语法糖的super关键字

在ES6(ECMAScript 2015)中,class 是一种语法糖,用于定义类和实现继承。super 关键字在类继承中扮演着重要的角色,它用于调用父类的构造函数或方法。

构造器中的 super

当你在子类中定义构造函数时,通常需要调用父类的构造函数来确保父类的初始化逻辑被执行。super 关键字用于这个目的。

示例

假设我们有一个父类 Animal 和一个子类 DogDog 继承自 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

在这个例子中:

  1. Dog 类通过 extends 关键字继承了 Animal 类。
  2. Dog 类的构造函数中,super(name) 调用了 Animal 类的构造函数,并将 name 传递给它。这样,Dog 实例的 name 属性就被正确初始化了。
  3. Dog 类还定义了自己的 speak 方法,覆盖了 Animal 类中的 speak 方法。

注意事项

  1. 必须在子类构造函数中调用 super:在子类的构造函数中,必须在使用 this 关键字之前调用 super。这是因为 super 负责初始化 this
  2. 继承静态方法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 关键字在类继承中用于调用父类的构造函数或方法,确保子类能够正确初始化和继承父类的属性和方法。

发表新评论