所以我正在阅读关于课程的Mozilla docs,并遇到了以下示例:
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + ' makes a noise.');
}
}
class Dog extends Animal {
constructor(name) {
super(name); // call the super class constructor and pass in the name parameter
}
speak() {
console.log(this.name + ' barks.');
}
}
let d = new Dog('Mitzie');
d.speak(); // Mitzie barks.
“狗”的子类扩展了其父类“动物”。在“狗”内部,构造函数与主体中的super方法一起使用,称为父“动物”的构造方法。绑定到“狗”可以让我们初始化自己的“狗”对象。
let d = new Dog('Mitzie');
到目前为止,都有意义。生活很好。 这是我感到困惑的地方。 考虑以下示例:
class Cat {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + ' makes a noise.');
}
}
class Lion extends Cat {
speak() {
super.speak();
console.log(this.name + ' roars.');
}
}
let l = new Lion('Fuzzy');
l.speak();
// Fuzzy makes a noise.
// Fuzzy roars
在这种情况下,“狮子”扩展了其父级“猫”。但是,Lion类中没有构造函数,但是我们仍然可以初始化Lion对象
let l = new Lion('Fuzzy');
使用“ new”关键字,所以我的问题是,super.speak()是否自动将“ this”绑定到Lion类,从而允许在没有其自己的构造函数的情况下对其进行初始化?子类始终需要构造函数吗?任何见识将不胜感激。