Javascript:使用super在子原型函数内部调用父原型函数



我有一个关于原型和超级在JS中的使用的问题。

我有一个父类Person。我已经将一个新的toString()函数挂接到Person.prototype

然后,我有一个子类Teacher(扩展Person(。我也试图在其原型上重写toString()方法,但是我希望重用其父方法的toString()方法的结果。

我试图在Teacher函数中调用super对象的toString()方法,但收到一个错误,说super未定义。为什么?在super的子函数的原型函数中,是否可以通过super重用父函数的方法?

现在,我知道这个问题可以用另一种方式解决,但我仍然很好奇用上面的方式是否可行。

这里有一些参考代码:

class Person {
name;
email;
constructor(name, email){
this.name = name;  
}
}
Person.prototype.toString = function(){
return `name: ${this.name}`
}    

class Teacher extends Person{
constructor(name, subject){
super(name);
this.subject = subject;
}
}
Teacher.prototype.toString = function(){
return this.super.toString() + ` subject: ${this.subject}`
}
let teacher = new Teacher("testname", "testSubject");
console.log(teacher.toString());

当您在原型上定义这样的函数时,我不认为super可用。相反,您应该在类中定义方法并使用super.toString。像这样:

class Person {
constructor(name, email) {
this.name = name;
}
toString() {
// you were missing `this` here
return `name: ${this.name}`;
}
}
class Teacher extends Person {
constructor(name, subject) {
super(name);
this.subject = subject;
}
toString() {
return super.toString() + ` subject: ${this.subject}`;
}
}
let teacher = new Teacher("testname", "testSubject");
console.log(teacher.toString());