2012-02-10 2 views
2

В JavaScript-коде я пытаюсь переименовать объект по его сохраненным данным. Я попытался использовать pathTo, как предложил этот сайт (http://thedesignspace.net/MT2archives/000381.html), но моя консоль возвращает «ReferenceError:« pathTo »не определена». Мой код выглядит примерно так:переименование переменных по свойствам (JavaScript)

// This code defines the Object constructor Card, used to make the card objects 
var Card = function() { 
    this.face = theFace(this); 
    this.suit = theSuit(this); 
    this.value = theValue(this); 
}; 

// This code creates the Deck to be used. 
var deck = []; 
for (i=0 ; i<52 ; i++) { 
    deck.push(i); 
}; 
for (i=51 ; i>0 ; i--) { 
    var random = Math.floor(Math.random()*i); 
    var temp = deck[random]; 
    deck[random] = deck[i]; 
    deck[i] = temp; 
}; 
// 0-12 is Spades. 
// 13-25 is Hearts. 
// 26-38 is Clubs. 
// 39-51 is Diamonds. 

// Now we create the hand of the player and dealer 
var player = []; 
var dealer = []; 

// Now to deal a card to player 
player.push(deck.pop()); 
dealer.push(deck.pop()); 

// and another 
player.push(deck.pop()); 
dealer.push(deck.pop()); 

// function theFace gives the face of a card 
function theFace(card) { 
    var faces = ["King","Ace","2","3","4","5","6","7","8","9","10","Queen","Jack"]; 
    return(faces[card%13]); 
}; 

// function theValue uses 'switch' to determine points from a card 
function theValue(card) { 
    var value = card % 13; 
    switch(value) { 

     case(0): 
     case(11): 
     case(12): 
      value = 10; 
      break; 

     case(1): 
      value = 11; 
      break; 

     default: 
      value = value; 
      break; 

    }; 
    return value; 
}; 

// function theSuit returns the suit of a card 
function theSuit(card) { 
    var suit; 
    if(card>38) { 
     suit = "Diamonds"; 
    }else if(card>25) { 
     suit = "Clubs"; 
    }else if(card>12) { 
     suit = "Hearts"; 
    }else { 
     suit = "Spades"; 
    }; 
    return suit; 
}; 

// function toObject the first (numbered) card of of a hand 
// and turns it into an Object with the desired properties 
function toObject(hand) { 
    var card = hand.shift(); 
    if (typeof(card) !== "number") { 
     hand.unshift(card); 
    } else { 
     var card = new Card(); 
     card = pathTo[card.suit + card.face]; 
    }; 
    return hand; 
}; 

console.log(player); 
toObject(player); 
toObject(player); 
console.log(player); 

Я пытаюсь переименовать карту я превратившись из TYPEOF === «число» в TYPEOF === «объекта», так что, когда я запустить код несколько раз (следовательно, функция) У меня нет дубликатов имен объектов в массиве рук.

Вот некоторые примеры того, что печатает моя консоль:

[ 19, 46 ] 
ReferenceError: 'pathTo' is undefined 

и

[ 31, 18 ] 
ReferenceError: 'pathTo' is undefined 

Там должен быть способ сделать это, я просто не могу найти как.

В функции toObject Я пытаюсь взять первый номер (карту) в ручном массиве и превратить его в объект, описывающий его квалификаторы, как карту стандартной колоды карт 52. EDIT: Я просто понял, что я даже не отталкиваю его. Я собираюсь попробовать что-то, чтобы увидеть, будет ли это работать.

EDITEDITED_SOLVED: Я сделал это! Оказывается, мне не нужно менять имя, код будет держать его отдельно для меня каким-то образом. Все, что мне нужно было сделать так, чтобы она работала правильно это:

Заменить

var Card = function() { 
    this.face = theFace(this); 
    this.suit = theSuit(this); 
    this.value = theValue(this); 
}; 

с

var Card = function(card) { 
    this.face = theFace(card); 
    this.suit = theSuit(card); 
    this.value = theValue(card); 
}; 

и

function toObject(hand) { 
    var card = hand.shift(); 
    if (typeof(card) !== "number") { 
     hand.unshift(card); 
    } else { 
     var card = new Card(); 
     card = pathTo[card.suit + card.face]; 
    }; 
    return hand; 
}; 

с

function toObject(hand) { 
    var card = hand.shift(); 
    if (typeof(card) !== "number") { 
     hand.unshift(card); 
    } else { 
     var card = new Card (card); 
     hand.push(card); 
    }; 
    return hand; 
}; 

Спасибо за помощь!

+0

Не могли бы вы объяснить на простом английском языке, чего вы пытаетесь достичь с помощью этого кода? – georg

+0

Извините, я думал, что сделал. То, что я делаю, занимает #r, стоящее за карточкой в ​​колоде из 52 карт (0-51) и поворачивая ее, а в ручном массиве - на объект, описывающий его свойства. Однако мне нужно создать имя для карты, и именно здесь 'pathTo' создает' ReferenceError'. – CAD97

+0

Моя основная проблема заключается в попытке изменить имя карты, поэтому я не получаю несколько объектов карты в моем массиве. – CAD97

ответ

0

Как отмечает @mattbornski, в JavaScript нет объекта pathTo, и, насколько я знаю, он не поддерживается ни одним браузером в любом месте. Эта статья, похоже, не указала эту часть своего кода.

Основываясь на том, как вы пытаетесь использовать его, хотя, вы хотите, чтобы сделать несколько изменений в код:

Создать pathTo объект вроде этого:

pathTo = {}; 

или

pathTo = new Object(); 

Затем дать каждому новому Card объект костюм и лицо, прежде чем пытаться добавить его в pathTo (или прежде чем пытаться использовать его, чтобы посмотреть машину г). Например, вы могли бы написать:

myCard = new Card(23); 

или

myCard = new Card('spade','2'); 

Наконец, когда ваша карта имеет как лицо и костюм, добавьте его к pathTo объекта, как это:

pathTo[this.suit + this.face] = this; // use this inside the Card constructor 

или

pathTo[myCard.suit + myCard.face] = myCard; // use this with an instance of a Card object 

Затем вы можете посмотреть карты с помощью:

pathTo['spade2'] 
0

Веб-сайт, который вы читаете, документирует синтаксис массива. Он не документирует функцию, называемую pathTo - такой встроенной функции нет, поэтому ссылаться на нее вызывает ReferenceError.

Возможно, вам следует определить объект и ссылаться на него.

Смежные вопросы