Javascript错误:对象不是视频扑克脚本中的函数

Javascript error: object is not a function in a video poker script

本文关键字:脚本 扑克 函数 视频 错误 对象 Javascript      更新时间:2023-09-26

所以我一直在写一个玩视频(或真正基于文本)扑克游戏的脚本,作为学习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();时,它给出的对象不是函数错误。

需要明确的是,我将hand创建为一个对象,它包含属性cards, handName, score, docHandName,其中cardscard对象的数组,它们本身包含suite, faceValue的属性。

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

帮助?

playOneGame的第二行用hand实例覆盖全局hand函数。因此,当createNewHand再次运行hand时,它不再是同一件事。

您可能应该将函数hand重命名为Hand