繁体   English   中英

在控制台中访问Javascript函数中的多个变量之一。

[英]Accessing one of a number of variables within a Javascript function in console.

我下面有一个10针保龄球计分系统的代码,并且随着分数的增加,我试图在控制台中访问'score'变量。 当我通过输入var game = new BowlingGame()创建一个新游戏时,我运行命令game.roll(5)获得一个分数,但是当我然后输入var myScore = game.score()然后将myScore输入到在控制台上,我得到了NaN。 我也刚刚尝试键入game.score()但无法检索到它。 无论如何,当我继续创建新的名册时,是否仍要检索更新的分数?

 var BowlingGame = function() { this.rolls = []; this.currentRoll = 0; }; BowlingGame.prototype.roll = function(pins) { this.rolls[this.currentRoll++] = pins; }; BowlingGame.prototype.score = function() { var score = 0; var frameIndex = 0; var self = this; function sumOfBallsInFrame() { return self.rolls[frameIndex] + self.rolls[frameIndex + 1]; } function spareBonus() { return self.rolls[frameIndex + 2]; } function strikeBonus() { return self.rolls[frameIndex + 1] + self.rolls[frameIndex + 2]; } function isStrike() { return self.rolls[frameIndex] === 10; } function isSpare() { return self.rolls[frameIndex] + self.rolls[frameIndex + 1] === 10; } for (var frame = 0; frame < 10; frame++) { if (isStrike()) { score += 10 + strikeBonus(); frameIndex++; } else if (isSpare()) { score += 10 + spareBonus(); frameIndex += 2; } else { score += sumOfBallsInFrame(); frameIndex += 2; } } return score; }; 

该错误位于sumOfBallsInFrame函数中,其中self.rolls[frameIndex + 1]试图访问rolls数组中没有值的位置。 这使函数5 + undefined结果变为NaN因为undefined不是数字。

 var BowlingGame = function() { this.rolls = []; this.currentRoll = 0; }; BowlingGame.prototype.roll = function(pins) { this.rolls[this.currentRoll++] = pins; }; BowlingGame.prototype.score = function() { var score = 0; var frameIndex = 0; var self = this; function sumOfBallsInFrame() { if (typeof self.rolls[frameIndex + 1] == 'undefined') return self.rolls[frameIndex]; return self.rolls[frameIndex] + self.rolls[frameIndex + 1]; } function spareBonus() { if (typeof self.rolls[frameIndex + 2] == 'undefined') return 0; return self.rolls[frameIndex + 2]; } function strikeBonus() { if (typeof self.rolls[frameIndex + 2] == 'undefined') return 0; return self.rolls[frameIndex + 1] + self.rolls[frameIndex + 2]; } function isStrike() { return self.rolls[frameIndex] === 10; } function isSpare() { if (typeof self.rolls[frameIndex + 1] == 'undefined') return false; // cannot be a spare yet return self.rolls[frameIndex] + self.rolls[frameIndex + 1] === 10; } for (var frame = 0; frame < this.currentRoll; frame++) { if (isStrike()) { score += 10 + strikeBonus(); frameIndex++; } else if (isSpare()) { score += 10 + spareBonus(); frameIndex += 2; } else { score += sumOfBallsInFrame(); frameIndex += 2; } } return score; }; var game = new BowlingGame(); game.roll(5); console.log(game.score()); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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