2014-10-10 44 views
0

一个功能,所以我一直在写一个脚本来播放视频(或真正基于文本)扑克游戏作为学习JavaScript的练习。我有一切努力通过一次游戏的实例来玩,但试图再次运行时,它会产生一个错误:“未捕获的类型错误:对象不是函数”JavaScript错误:对象不是在视频扑克脚本

尝试访问此错误时出现创造一个新的手。

下面是相关的代码,我离开了那几个功能似乎并没有被引起的任何问题:

//object constructor for card 
function card(suite, faceValue) { 
    this.suite = suite, 
    this.faceValue = faceValue 
} 

//object constructor for hand 
function hand(cards, handName, score, docHandName) { 
    this.cards = cards, 
    this.handName = handName, 
    this.score = score, 
    this.docHandName = docHandName 
} 

var deck = new Array; 
var buildDeck = function() { 
    for (var i = 0; i <= 52; i++) { 
    if (i < 13) { 
     deck[i] = new card("Spades", i + 2); 
    } 
    else if (i < 26) { 
     deck[i] = new card("Clubs", i - 11); 
    } 
    else if (i < 39) { 
     deck[i] = new card("Hearts", i - 24); 
    } 
    else if (i < 52) { 
     deck[i] = new card("Diamonds", i - 37); 
    } 
    } 
} 

//pulls a card from location in deck specified by randomSpot() 
var pullCard = function(spot) { 
    var newCard = deck[spot]; 
    deck.splice(spot, 1); 
    return newCard; 
} 

//takes away a card each time 
//passes into pullCard(spot) as spot 
var pullCount = 0; 
var randomSpot = function() { 
    var x = Math.floor(Math.random() * (52 - pullCount)); 
    pullCount++; 
    return x; 
} 

var dealFiveCards = function() { 
    var card1 = pullCard(randomSpot()); 
    var card2 = pullCard(randomSpot()); 
    var card3 = pullCard(randomSpot()); 
    var card4 = pullCard(randomSpot()); 
    var card5 = pullCard(randomSpot()); 
    var fiveCards = [card1, card2, card3, card4, card5]; 
    return fiveCards; 
} 

function createNewHand() { 
    newHand = new hand(); 
    newHand.cards = dealFiveCards(); 
    return newHand; 
} 

var playOneGame = function() { 
    buildDeck(); 
    hand = createNewHand(); 
    hand.cards.sort(compare); 
    assignHandScore(); 
    wager = prompt("How much do you bet?"); 
    printHandValue(); 
    dealAgain(); 
    hand.cards.sort(compare); 
    assignHandScore(); 
    payout = pays(wager); 
    printHandValue(); 
    printPayout(); 
} 

playAgain = "Y"; 

while (playAgain === "Y") { 
    playOneGame(); 
    playAgain = prompt("Would you like to play again? Y/N").toUpperCase(); 
} 

试图运行playOneGame()功能的第二遍的时候出现这样的错误。第一次运行良好,并且创建了一只手。第二次,当它达到hand = createNewHand();它给该对象不是一个函数错误。

为了清楚起见,我有作为对象,其中所包含的属性cards, handName, score, docHandName其中cardscard对象的,本身含有的属性suite, faceValue的阵列创建的hand

该错误给出函数createNewHand()中的行newHand = new hand();作为参考线。

帮助?

回答

1

playOneGame第二行与手的一个实例覆盖全局hand功能。所以当createNewHand再次运行hand它不再是同样的事情。

你或许应该hand重命名功能Hand

+0

圣牛蝙蝠侠,将对象构造函数更改为“手”工作!问题解决了。直到我发现一个新问题... 谢谢! – icegoat 2014-10-10 20:35:34