我正在嘗試構建一個撲克遊戲。所討論的方法非常簡單,它在第一次運行時就能正常工作。JavaScript第二次找不到方法?
這部分是不完美的約定,因爲我只是用它來測試我的方法:
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();
};
第一和第二循環的工作,並顯示一切手。當它到達最後的循環,調試器告訴我:「類型錯誤: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;
};
我完全不知所措。
'testHand = hand.removePairs();'會給你一個數組(tempCards) 。所以你不能在數組對象上調用'Hand'的方法。只需再次通過代碼或使用調試器。 – rajuGT