JavaScript第二次找不到方法?

时间:2016-01-20 12:28:25

标签: javascript function methods

我正在尝试建立扑克游戏。有问题的方法非常简单,它在第一次运行时有效。

这部分不是完美的约定,因为我只是用它来测试我的方法:

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;
};

我完全感到困惑。

1 个答案:

答案 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);