Javascript 创建扑克牌
在JavaScript中创建对象时遇到问题 试图创建一副扑克牌,然后我可以显示我想要的。我很擅长用HTML来显示它们,只是在理解JavaScript中我做错了什么时遇到了一个问题,JavaScript只是在为我创建未定义的卡片Javascript 创建扑克牌,javascript,object,Javascript,Object,在JavaScript中创建对象时遇到问题 试图创建一副扑克牌,然后我可以显示我想要的。我很擅长用HTML来显示它们,只是在理解JavaScript中我做错了什么时遇到了一个问题,JavaScript只是在为我创建未定义的卡片 (function () { function Card (rank, suit) { this.rank = rank; this.suit = suit; }; function Deck() { this.deck = new Ar
(function () {
function Card (rank, suit) {
this.rank = rank;
this.suit = suit;
};
function Deck() {
this.deck = new Array();
this.makeDeck = makeDeck;
this.shuffle = shuffle;
this.deal = deal;
}
function makeDeck() {
var ranks = new Array("A", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"J", "Q", "K");
var suits = new Array("Clubs", "Diamonds", "Hears", "Spades");
this.deck = new Array(52);
var i, j;
for (i = 0; i < suits.length; i++) {
for (j = 0; j < ranks.length; j++) {
this.deck[i*ranks.length + j] = new Card(ranks[j], suits[i]);
document.write("Card made \n");
}
}
};
function shuffle() {
var i, n, j, temp;
for (i = 0; i < n; i++) {
for (j = 0; j < this.deck.length; j++) {
k = Math.floor(Math.random() * this.deck.length);
temp = this.deck[j];
this.deck[j] = this.deck[k];
this.deck[k] = temp;
}
}
document.write("Cards Shuffled");
};
function deal() {
if (this.deck.length > 0) {
return this.deck.shift();
}
else return null;
};
var deck = new Deck();
deck.makeDeck();
deck.shuffle();
for (i = 0; i < 2; i++) {
for (j = 0; j < 5; j++) {
var Card = new Card(deck.deal);
var c = JSON.stringify(Card);
document.write(this.deck[j]);
}
}
} ());
(函数(){
功能卡(等级、套装){
这个.等级=等级;
这套衣服;
};
功能组(){
this.deck=新数组();
this.makeDeck=makeDeck;
this.shuffle=洗牌;
this.deal=deal;
}
函数makeDeck(){
var等级=新数组(“A”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”,
“J”、“Q”、“K”);
var套装=新阵列(“梅花”、“钻石”、“灵车”、“黑桃”);
this.deck=新阵列(52);
varⅠ,j;
对于(i=0;i<0.length;i++){
对于(j=0;j0){
返回此.deck.shift();
}
否则返回null;
};
var甲板=新甲板();
deck.makeDeck();
洗牌();
对于(i=0;i<2;i++){
对于(j=0;j<5;j++){
var卡=新卡(牌组.交易);
var c=JSON.stringify(卡片);
文件。书写(本甲板[j]);
}
}
} ());
这是有问题的一行:
this.deck=新卡(排名[j],适合[i])代码>
this.deck
应该是包含所有卡的数组,但是在上面的行中,您每次都用一张新卡覆盖它
您有两种选择:
第一选择
不要使用this.deck=newarray(52)
,而是使用this.deck=[]
将空数组初始化为this.deck
然后使用this.deck.push(新卡(等级[j],套装[i]))
将所有卡的组合推送到你的牌组中
第二种选择
第一个选项的问题是,array.push
实际上效率不高。阅读更多信息。对于一个52大小的阵列来说,这并不重要,只要把它放在桌子上,让每个人都知道
或者,您可以使用this.deck[i]=新卡(等级[j],套装[i])
来填充阵列。您可以为此使用this.deck=[]
或this.deck=new数组(52)
。这两种方法都可行。我不是JS方面的专家,但有一件事让我感到震惊,那就是你的牌组分配周期this.deck=新牌(等级[j],适合[I])代码>在您创建卡片时,是否也应将其编入索引,如中所示:
for (i = 0; i < suits.length; i++) {
for (j = 0; j < ranks.length; j++) {
this.deck[ranks.length*i+j] = new Card(ranks[j], suits[i]);
}
}
for(i=0;i
可能这就是为什么您没有希望在“主要”执行部分中形成的组块的原因:
var deck = new Deck();
deck.makeDeck();
deck.shuffle();
for (i = 0; i < 2; i++) {
for (j = 0; j < 5; j++) {
var Card = new Card(deck.deal);
var c = JSON.stringify(Card);
document.write(this.deck[j]);
}
}
var deck=新deck();
deck.makeDeck();
洗牌();
对于(i=0;i<2;i++){
对于(j=0;j<5;j++){
var卡=新卡(牌组.交易);
var c=JSON.stringify(卡片);
文件。书写(本甲板[j]);
}
}
有几件事值得注意
将var卡
从var卡=新卡(deck.deal)更改为var卡
代码>,因为变量Card
在第一次迭代后覆盖函数Card
deck.deal
是一个函数。您需要的是deck.deal
的返回值,因此,必须使用deck.deal()
document.write(这个.deck[j])代码>-您应该改用deck.deck[j]
,因为您需要访问在var-deck
中初始化的卡片组,要访问实际卡片组,您需要访问对象卡片组的卡片组属性。因此,您需要使用deck.deck[j]
1.数组文字语法(['a',b']
)通常比使用数组
构造函数更可取。2.看看你在makedeck
中做了什么。3.您应该使用DOM方法,例如document.body.appendChild(document.createTextNode('x'))
,而不是document.write
。不理解您所说的内容。事实上,这个答案不再算数。我看到你已经编辑了你的问题,并且解决了这个问题。我发布了另一个答案,因为我看到了另一个问题。其他问题有什么进展吗?检查我的其他答案。好的,做了你说的更改。很有道理,谢谢你。deck.deck[j]刚刚从[object]上掉落一个[object](8次)。如果您知道从哪里开始,我非常感谢您的帮助。这是因为您直接使用document.write
打印它。HTML不能理解对象,JavaScript可以。如果需要查看等级和西装,请从deck.deck[j]
获取值。试着打印deck.deck[j].rank
和deck.deck[j].suit
。好的,对不起,我刚才说到这里了。是的,那些deck.deck[j].suit似乎没有输出任何值。想知道为什么你发布了多个答案。。农业代表要求对他们每个人进行投票。。?!