我正在尝试从averageScore()
类中调用Player
类中声明的Leaderboard
函数,但出现引用错误。
将我的Player
类中的代码拖放到控制台中可以很好地工作,但是当我尝试从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调用,但是却出现了参考错误-有任何想法吗?
答案 0 :(得分:2)
LeaderBoard扩展Player毫无意义,因为LeaderBoard将包含一个Player列表
有关工作示例,请参见下面的代码
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
答案 1 :(得分:0)
您使用的是arrow function,而不是通常的定义。这是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)*/