需要有关子类和构造函数的帮助

时间:2018-06-24 16:27:12

标签: inheritance constructor super es6-class

所以我正在阅读关于课程的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类,从而允许在没有其自己的构造函数的情况下对其进行初始化?子类始终需要构造函数吗?任何见识将不胜感激。

0 个答案:

没有答案