以下代码没有任何问题。它运行顺利。
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{}
答案 0 :(得分:3)
正如@Pointy在评论中提到的,第二个示例在return
类的getPrint()
方法中缺少Cat
。 super.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
方法。