[英]Why am I getting a reference error between my JS classes?
我正在尝试从Leaderboard
类中调用Player
类中声明的averageScore()
函数,但出现参考错误。
将Player
类中的代码Reference error: add_score is undefined
到控制台中可以很好地工作,但是当我尝试从Leaderboard
调用它时,会出现Reference error: add_score is undefined
。
这是我的球员课:
class Player {
constructor(player_id, score) {
this.player_id = player_id;
this.scores = [score];
this.total = score;
//this.average = this.total/this.scores.length;
}
addScore(score) {
this.total += score;
this.scores.push(score);
return score;
}
averageScore() {
return this.scores.length ? this.total / this.scores.length : 0;
}
resetScore() {
this.scores = [];
this.score = 0;
}
};
这是我的排行榜课程:
class LeaderBoard extends Player {
add_score = (player_id, score) => {
if (!this.player_id) {
var newPlayer = new Player(player_id, score);
this.player_id = newPlayer;
} else {
var average = this.player_id.averageScore();
return average.toFixed(1);
}
};
/*...(additional functions and closing bracket excluded)*/
我曾期望averageScore显示为对它的add_score调用,但是却出现了参考错误-有什么想法吗?
对于LeaderBoard扩展Player是没有意义的,因为LeaderBoard将包含玩家列表
请参见下面的代码以获取工作示例
class Player { constructor(player_id, score) { this.player_id = player_id; this.scores = [score]; this.total = score; //this.average = this.total/this.scores.length; } addScore(score) { this.total += score; this.scores.push(score); return score; } averageScore() { return this.scores.length ? this.total / this.scores.length : 0; } resetScore() { this.scores = []; this.score = 0; } }; class LeaderBoard { constructor() { this.players = {}; } addScore(player_id, score) { if (!this.players[player_id]) { this.players[player_id] = new Player(player_id, score); } else { this.players[player_id].addScore(score); } var average = this.players[player_id].averageScore(); return average.toFixed(1); } }; let x = new LeaderBoard(); console.log(x.addScore(1, 1)); // avg is 1 / 1 === 1 console.log(x.addScore(1, 3)); // avg is (1 + 3) / 2 === 2 console.log(x.addScore(1, 5)); // avg is (1 + 3 + 5) / 3 === 3 console.log(x.addScore(2, 7)); // avg for player 2 is 7 / 1 === 7
您正在使用箭头功能,而不是像通常那样定义它。 这是应该用于LeaderBoard
类的代码:
class LeaderBoard extends Player {
add_score(player_id, score) { //THIS LINE IS WHERE YOU WENT WRONG
if (!this.player_id) {
var newPlayer = new Player(player_id, score);
this.player_id = newPlayer;
} else {
var average = this.player_id.averageScore();
return average.toFixed(1);
}
};
/*...(additional functions and closing bracket excluded)*/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.