我正在尝试将卡添加到Deck对象中的数组,但由于某种原因,push()失败了。我之前有这个工作,但经过一些改动后,我已经有效地搞砸了。 (“testX”写入用于调试目的)
<!DOCTYPE HTML>
<html>
<head>
<style>
#myCanvas {
border: 1px solid #9C9898;
}
body {
margin: 0px;
padding: 0px;
}
</style>
<script type="text/javascript">
<!--
//draws the game
window.onload = function() {
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
//draws the rectangles that will be the card
var cardHeight = 125,
cardWidth = 80;
context.beginPath();
//draws the top row of 5 cards
for(var x=0;x<5;x++){
context.rect(10+(x*(cardWidth+10)),10,cardWidth,cardHeight);
}
//draws the bottom row of 5 cards
for(x=0;x<5;x++){
context.rect(10+(x*(cardWidth+10)),150,cardWidth,cardHeight);
}
//draws the deck
context.rect(10+5*cardWidth+65,(150-10)/2,cardWidth,cardHeight);
context.fillStyle = 'white';
context.fill();
context.lineWidth = 2;
context.strokeStyle = 'black';
context.stroke();
};
function Deck(){
//creates the unshuffled deck (loadedDeck) once to make the shuffling process faster
var loadedDeck = new Array(),
realDeck;
this.loadTheDeck = function(){ //method
for(x=1;x<=13;x++){
this.loadedDeck.push(x+" Spades"); //<---issue line (all 4 are failing though this is the first)
this.loadedDeck.push(x+" Clubs");
this.loadedDeck.push(x+" Hearts");
this.loadedDeck.push(x+" Diamonds");
}
document.write(this.loadedDeck);
};
this.loadTheDeck(); //creates the unshuffled deck when the Deck is instantiated
//resets the deck and randomizes
this.shuffle = function(){ //method
//creates the real deck
this.realDeck = this.loadedDeck;
//write shuffle function
};
this.shuffle(); //shuffles the Deck when instantiated
}
document.write("test-1");
var myDeck = new Deck();
document.write("test0");
document.write(this.realDeck);
document.write("test1");
-->
</script>
</head>
<body>
<canvas id="myCanvas" height="300" width="600"></canvas>
</body>
</html>
以下是代码演示:http://jsfiddle.net/NfmsR/2/
答案 0 :(得分:4)
当您运行此行时:
this.loadedDeck.push(x+" Spades");
您正在使用this.loadedDeck
数组。您是否将其定义为Deck
对象的一部分?都能跟得上:
var loadedDeck = new Array(),
realDeck;
将声明更改为此,它应该有效:
this.loadedDeck = []; // I'd use [] instead of new Array().
this.realDeck = [];
正如@ j08691指出的那样,您需要将realDeck
更改为this.realDeck
,因为您在此类似地调用它:
this.shuffle = function(){ //method
//creates the real deck
this.realDeck = this.loadedDeck;
//write shuffle function
};
答案 1 :(得分:2)
您指的是“loadedDeck”,就好像它是“Deck”对象的属性一样。不是;它只是构造函数闭包的局部变量。
只需将其称为“loadedDeck”,看看是否有帮助。 “realDeck”也是如此。
this.loadTheDeck = function(){ //method
for(var x=1;x<=13;x++){
loadedDeck.push(x+" Spades"); //<---issue line (all 4 are failing though this is the first)
loadedDeck.push(x+" Clubs");
loadedDeck.push(x+" Hearts");
loadedDeck.push(x+" Diamonds");
}
最好不要习惯滥用document.write
进行调试。另外,不要忘记使用var
!!
答案 2 :(得分:0)
您使用Deck
访问的this
对象没有“loadedDeck
” - 属性。 loadedDeck
是一个局部变量。只需删除“this.
”。