我正在尝试建立扑克游戏。有问题的方法非常简单,它在第一次运行时有效。
这部分不是完美的约定,因为我只是用它来测试我的方法:
var $ = function (id) { return document.getElementById(id); };
var test = function() {
var deck = new POKER.Deck();
var hand = new POKER.Hand();
for (var i = 0; i < 7; i++){
hand.addCard(deck.dealCard());
}
hand.sortByRank();
for (var j = 0; j < 7; j++){
var img = document.createElement("img");
var card = hand.getCardAtIndex(j); //** <------- WORKS HERE**
img.src = card.getImage();
$("images").appendChild(img);
}
var testHand = new POKER.Hand();
testHand = hand.removePairs();
for (var k = 0; k < testHand.length; k++) {
var img2 = document.createElement("img");
var card2 = testHand.getCardAtIndex(k); // **<------FAILS HERE**
img2.src = card2.getImage();
$("handImg").appendChild(img2);
}
};
window.onload = function() {
test();
};
第一个和第二个循环工作,并显示手和一切。当它到达最后一个循环时,调试器告诉我“TypeError:testHand.getCardAtIndex不是函数”
我试图测试removePairs方法(更容易测试直道),并且在调试器中观察变量时,testHand显然已正确填充。该方法似乎工作正常。
getCardAtIndex:
POKER.Hand.prototype.getCardAtIndex = function(index) {
return this.cards[index];
};
removePairs:
POKER.Hand.prototype.removePairs = function(){
var allCards = this.cards;
var tempCards = [];
var uniqueRanks = [];
var unique;
for(var i = 0; i < allCards.length; i++){
unique = true;
for(var j = 0; j < uniqueRanks.length; j++){
if(allCards[i].getRank() == uniqueRanks[j]){
unique = false;
break;
}
}
if(unique){
uniqueRanks.push(allCards[i].getRank());
tempCards.push(allCards[i]);
}
}
return tempCards;
};
我完全感到困惑。
答案 0 :(得分:0)
var testHand = new POKER.Hand();
testHand = hand.removePairs();
hand.removePairs()
会返回Array
,而不是Hand
个对象。
这就是您无法访问getCardAtIndex
方法的原因。
如果cards
是公共财产,您可以这样做:
testHand.cards = hand.removePairs();
或者您可以使用setter方法:
testHand.setCards(hand.removePairs);