2012-02-10 53 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卡片卡片的卡片。編輯:我只是意識到我甚至沒有推回來。我會嘗試一下,看看它是否會起作用。

EDITEDITEDIT_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 2012-02-10 14:51:01

+0

對不起,我以爲我做到了。我正在做的是讓一個#r代表52張卡片(0-51)中的一張卡片,並在手陣列中將其轉向描述其屬性的對象。但是,我需要爲卡片生成一個名稱,這就是'pathTo'創建一個'ReferenceError'的地方。 – CAD97 2012-02-10 15:50:47

+0

我的主要問題是試圖改變卡的名稱,所以我沒有結束與我的數組中的多個卡對象。 – CAD97 2012-02-10 16:09:15

回答

0

正如@mattbornski指出的那樣,JavaScript中沒有pathTo對象,據我所知,任何地方的瀏覽器都不支持它。該文章似乎已經省略了他們的代碼的這一部分。

基於你如何試圖使用它,但是,你會希望你的代碼的一些變化:

創建一個pathTo對象是這樣的:

pathTo = {}; 

pathTo = new Object(); 

然後,給每個新Card對象西裝,臉你嘗試將其添加到pathTo(之前或之前您嘗試使用它來查找汽車d)。例如,你可以寫:

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。

也許你應該定義一個對象並引用它。