📜  如何从 JavaScript 中的子类调用父方法?(1)

📅  最后修改于: 2023-12-03 15:23:46.589000             🧑  作者: Mango

如何从 JavaScript 中的子类调用父方法?

在 JavaScript 中,可以使用类继承来创建对象。当子类继承父类时,子类可以调用父类中的方法。但是,有时候我们需要在子类中调用父类的方法,本文将介绍如何实现这个功能。

使用 super 关键字

在 JavaScript 中,可以使用 super 关键字来在子类中调用父类的方法。

先看一个例子:

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    console.log(`${this.name} makes a noise.`);
  }
}

class Dog extends Animal {
  speak() {
    super.speak();
    console.log(`${this.name} barks.`);
  }
}

let d = new Dog('Rufus');
d.speak();

这个例子中,我们定义了一个 Animal 类和一个 Dog 类。Animal 类有一个 speak 方法,用于输出动物发出声音的信息。Dog 类继承了 Animal 类,并且覆盖了 speak 方法。在 Dog 类中,我们使用 super.speak() 来调用 Animal 类中的 speak 方法,并且在此基础上输出狗吠的信息。

运行这个例子,你会看到输出:

Rufus makes a noise.
Rufus barks.

这证明了使用 super 关键字可以在子类中调用父类的方法。

使用 call 方法

除了使用 super 关键字,我们也可以使用 call 方法来调用父类中的方法。call 方法可以将一个函数的 this 值绑定到某个对象,并调用这个函数。

先看一个使用 call 方法的例子:

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    console.log(`${this.name} makes a noise.`);
  }
}

class Dog extends Animal {
  speak() {
    Animal.prototype.speak.call(this);
    console.log(`${this.name} barks.`);
  }
}

let d = new Dog('Rufus');
d.speak();

这个例子中,我们同样定义了 Animal 类和 Dog 类,并且覆盖了 speak 方法。在 Dog 类中,我们使用了 Animal.prototype.speak.call(this) 来调用 Animal 类中的 speak 方法,并绑定了 this 值为当前的对象。这样 speak 方法会输出动物的声音信息。

运行这个例子,你会得到和之前相同的输出:

Rufus makes a noise.
Rufus barks.

这也证明了使用 call 方法同样可以在子类中调用父类的方法。

总结

本文介绍了如何从 JavaScript 中的子类调用父方法。我们可以使用 super 关键字或者 call 方法来实现这个功能。当需要在子类中调用父类的方法时,可以选择使用其中一种方法。