Ich bekomme einen undefinierten Wert beim Aufruf rnd.winner()
in der untergeordneten Klasse. Dies sollte den Namen des Spielers von Eltern wie JOHN zurückgeben. Der Aufruf der Testfunktion von Kind gibt den korrekten Wert win()
von Eltern zurück. Aufruf von super.constructor.name
als Rückgabestatus in Kind gibt Eltern Klassenname ->player
Nun, warum ist das?JS class child returns undefined beim Zugriff auf den übergeordneten Konstruktor
class player {
constructor(name) {
this.name = name;
this.win = 0;
this.loss = 0;
};
win() {
return this.win;
};
loss() {
return this.loss;
};
};
class scoreBoard extends player {
constructor(round) {
super();
this.round = round;
this.emblem = 0;
};
add() {
return this.round.push([...this.round].pop() + 1);
}
winner() {
return super.name;
};
loser() {
return super.constructor.name;
};
emblem() {
return this.emblem;
};
test() {
return super.win();
};
};
let plr = new player("JOHN"),
rnd = new scoreBoard([0]);
console.log(plr.name, rnd.winner(), rnd.test());
Verwenden Sie nicht 'super' mit reinen Dateneigenschaften. Sie existieren immer auf Ihrer aktuellen Instanz. Verwenden Sie stattdessen 'this.name'. – Bergi
Warum glauben Sie, dass ein "scoreBoard" eine Erweiterung eines 'players' ist? Ich verstehe die Logik nicht wirklich. Für ein Scoreboard (mit Gewinner- und Verlierer-Methode) brauchst du mindestens zwei Spieler, damit ich nicht sammle, was du dir in der Erbschaftsbeziehung erhofft hast. Und warum ist ein Array "rund"? 'constructor.name' hat * nichts * mit Ihrer' name' Eigenschaft zu tun. Es ist eine vordefinierte Eigenschaft von Funktionen (da "Konstruktor" eine Funktion ist). – trincot