Получение неожиданного вывода при запуске функции.Вывод кода прототипа - PullRequest
0 голосов
/ 02 марта 2011

Когда вызывается функция loadGame(), она должна собрать колоду карт, сдать карты, а затем показать карты.Это делает все это плюс больше.Когда запускается функция показа карточек пользователю, она выводит число, представляющее карточку (и), вместе с кодом единственного прототипа на всей странице.Почему?

Часть Javascipt

    //Variables
    var theDeck = new Array();
    var discardPile = new Array();
    var allHands = new Array();

    //Prototypes
    Array.prototype.exists = function(search) {
       for(i=0;i<this.length;i++) 
          if (this[i] == search) return true;
       return false;
    }

    //Functions (Only the ones the that are needed for this question)
    function buildDeck() {
       var i = 0
       for (x=0;x<=3;x++) {
          for (y=0;y<=12;y++) {
             //x is for the type (i.e. spades, hearts, ...)
             //y is for the face value (i.e. nine, ten, jack, ...)
             theDeck[i] = new Array(x,y);
             i++ //Gets ready to add the next card in the deck.
          }
       }
    }
    function dealHands() {
       var cardsOfHand = new Array()
       for (x=0;x<=1;x++) {
          for (y=0;y<=1;y++) {
             allHands[x][y] = fetchCard();
             discardCard(allHands[x][y]);
          }
       }
    }

    function discardCard(card) {
    var totalCards = discardPile.length;
       if (totalCard != 0) { totalCards++ }
       discardPile[totalCards] = card;
    }

    function fetchCard() {
       var usedCard = true;
       while(usedCard == true) {
          var randomCard = Math.floor(Math.random()*51);
          usedCard = discardPile.exists(randomCard);
       }
       return randomCard;
    }
    function showHands() {
       for (whoHand in allHands) {
          var hand = allHands[whoHand];
          var cards = "";
          for (whichCard in hand) {
             var card = hand[whichCard];
             cards += "[" + card + "]"; //TEMP: Used for debugging.
          }
          id = "player" + whoHand + "cards";
          document.getElementById(id).innerHTML = cards;
       }
    }
    function loadGame() {
       buildDeck();
       dealHands();
       showHands();
    }

Часть HTML

    <fieldset>
       <legend align="center">Dealer's Hand</legend>
       <div id="player0cards"></div>
    </fieldset>
    <fieldset id="">
       <legend align="center">Player's Hand</legend>
       <div id="player1cards"></div>
    </fieldset>

Выход

Элемент Div с идентификатором player0cards: [50][12][function (search) { for(i=0;i
Элемент Div с идентификатором «player1cards»: [14][6][function (search) { for(i=0;i
Примечание: числа (т. Е. 50, 12, 14, 6) являются случайными числами, которые представляют карту.

Почему другая часть отображается из единственного прототипа в сценарии?

Ошибка

Uncaught TypeError: Cannot set property 'innerHTML' of null на линии с закрывающей } для петли for (whoHand in allHands).

1 Ответ

2 голосов
/ 02 марта 2011

Похоже, проблема в том, что вы запускаете собственный JS-массив с использованием синтаксиса for-in-syntax. Этот синтаксис предназначен для объектов: если вы используете его для собственных массивов, он также будет возвращать члены / методы, как функция «существует».

Используйте только for(var i=0;i<array.length;++i) -синтаксис для перебора элементов массивов.

...