繁体   English   中英

为什么我的JS类之间出现引用错误?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM