在控制台的 Javascript 函数中访问多个变量之一。
Accessing one of a number of variables within a Javascript function in console.
我有以下用于十瓶保龄球计分系统的代码,我正尝试在分数增加时访问控制台中的 '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());
我有以下用于十瓶保龄球计分系统的代码,我正尝试在分数增加时访问控制台中的 '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());