任何人都会在我的代码中看到一个错误,阻止变量“player1Bananas”发生变化?功能中的其他所有功能都可以正常工作
//update playerStats arguments:
//banana is a banana object
//x and y are the banana's position
//players bananas is player1Bananas or player2Bananas,
//ballPosition is "left" or "right"
updatePlayerStats: function(banana, x, y, playersBananas, ballPosition) {
playersBananas += 1;
gameController.bananasTaken += 1;
banana.x = x;
banana.y = y;
gameController.player1Score = 0;
gameController.player2Score = 0;
gameController.setUpPaddles();
gameController.setUpBall(ballPosition);
},
gameController.updatePlayerStats( gameController.Banana1, 20, gameController.canvas.height - 20 - gameController.Banana1.height,
gameController.player1Bananas, "left");
谢谢!
答案 0 :(得分:5)
您将gameController.player1bananas
的值作为参数传递给函数。
在将值分配给局部变量playersBananas
且受范围限制的函数中。当您对其进行更改时,您不再对最初传递的变量进行更改,而是对新变量playersBananas
进行更改。
要解决此问题,您需要将其作为对象传递。 JavaScript不会将其作为值传递,而是传递给对象本身。
答案 1 :(得分:2)
因为在JavaScript中数字是按值传递的......
你必须传递除了单个数字之外的其他内容,例如玩家状态对象(例如{id:1,香蕉:17})。
答案 2 :(得分:1)
gameController.player1Bananas是一种基本类型,因此它通过值...而不是引用传递。这意味着函数内部的playerBananas不再具有对player1Bananas的任何引用,它只是一个整数值。
尝试传入一个对象...例如,你可以拥有一个带有bananaCount属性的玩家对象。然后将播放器对象传递给函数并增加播放器对象的bananaCount属性。
例如
//update playerStats arguments:
//banana is a banana object
//x and y are the banana's position
//players bananas is player1Bananas or player2Bananas,
//ballPosition is "left" or "right"
updatePlayerStats: function(banana, x, y, player, ballPosition) {
player.bananaCount += 1;
gameController.bananasTaken += 1;
banana.x = x;
banana.y = y;
gameController.player1Score = 0;
gameController.player2Score = 0;
gameController.setUpPaddles();
gameController.setUpBall(ballPosition);
},
gameController.updatePlayerStats( gameController.Banana1, 20, gameController.canvas.height - 20 - gameController.Banana1.height,
gameController.player1, "left");
请参阅此链接以获取更好的解释.. http://snook.ca/archives/javascript/javascript_pass
答案 3 :(得分:0)
将player1Bananas
更改为全局变量,然后在函数
player1Bananas