在“继承”中,我遇到了“返回”代码的麻烦

时间:2019-04-22 18:04:21

标签: javascript class

以下代码没有任何问题。它运行顺利。

class Animal{
  constructor(name,age){
    this.name = name;
    this.age = age;
  }
  getPrint(){
    console.log(`name: ${this.name}\nage:${this.age}`);
  }
};

class Cat extends Animal{
  getPrint(){
    super.getPrint();
  }
}


let animal = new Animal('miyav',9);
let cat = new Cat("mayov",12);
// cat.name = "mayov";
// cat.age = 12;
animal.getPrint()
cat.getPrint()

但是当我尝试使用“ return”编写上述代码时,我得到一个错误。

class Animal{
  constructor(name,age){
    this.name = name;
    this.age = age;
  }
  getPrint(){
    return `name: ${this.name}\nage:${this.age}`;
  }
};

class Cat extends Animal{
  getPrint(){
    super.getPrint();
  }
}


let animal = new Animal('miyav',9);
let cat = new Cat("mayov",12);
console.log(animal.getPrint());
console.log(cat.getPrint());

我认为我已经解决了问题,但我仍然不明白为什么。

如果在上面的代码中键入以下代码,则问题已解决。 但是如何?

class Cat extends Animal{}

1 个答案:

答案 0 :(得分:3)

正如@Pointy在评论中提到的,第二个示例在return类的getPrint()方法中缺少Catsuper.getPrint()按预期从超类返回值,但是该值不会从子类的getValue方法返回。要解决此问题,只需将return添加到子类中的方法

class Animal{
  constructor(name,age){
    this.name = name;
    this.age = age;
  }
  getPrint(){
    return `name: ${this.name}\nage:${this.age}`;
  }
};

class Cat extends Animal{
  getPrint(){
    return super.getPrint();
  }
}


let animal = new Animal('miyav',9);
let cat = new Cat("mayov",12);
console.log(animal.getPrint());
console.log(cat.getPrint());

class Cat extends Animal{}起作用的原因是,由于您没有在子类中重新定义getPrint方法,它会自动从超类继承它(这可能是您想要的,因为您的getPrint方法不是做任何额外的事情)。因此,如果您声明一个空的子类,它将获得超类的所有方法。

class Cat extends Animal{}
let cat = new Cat("mayov",12);
console.log(cat.getPrint());

之所以可行,是因为cat实例将使用通过getPrint关键字正确定义的超类的return方法。