2016-01-20 61 views
0

我正在嘗試構建一個撲克遊戲。所討論的方法非常簡單,它在第一次運行時就能正常工作。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; 
 
};

我完全不知所措。

+0

'testHand = hand.removePairs();'會給你一個數組(tempCards) 。所以你不能在數組對象上調用'Hand'的方法。只需再次通過代碼或使用調試器。 – rajuGT

回答

0
var testHand = new POKER.Hand(); 
testHand = hand.removePairs(); 

hand.removePairs()返回Array,而不是一個對象Hand。 這就是爲什麼你無法訪問getCardAtIndex方法。 如果cards是公共財產,你可以這樣做:

testHand.cards = hand.removePairs(); 

或者你可以有一個setter方法:

testHand.setCards(hand.removePairs); 
+0

我必須更改removePairs,以便它創建一個Hand對象並將其返回,但它工作正常!非常感謝你的幫助! – Tom