在数组中动态创建对象访问属性 - JavaScript

时间:2014-04-18 16:25:02

标签: javascript object dynamic

我正在尝试使用52个对象生成一副牌。我想将这些对象放在一个数组中,并能够访问属性。我成功创建了对象并将它们推送到数组。但是,尝试从数组中访问属性会返回“未定义”。我究竟做错了什么?谢谢你的帮助。

我尝试了以下内容,但他们不适合我:

console.log(cards[0].displayName);
console.log(cards[0]['displayName']);
console.log(cards[0][displayName]);

我也没有通过' for'来访问这些房产。循环。

var cards = [];

function card(value, suit, image){
    this.value = value;
    this.displayName = value + ' of ' + suit;
    if (value == 1) this.displayName = 'Ace of ' +  suit;
    if (value ==  11) this.displayName = 'Jack of ' + suit;
    if (value ==  12) this.displayName = 'Queen of ' + suit;
    if (value ==  13) this.displayName = 'King of ' + suit;
    if (value >= 11) this.value = 10;
    this.suit = suit;
    this.image = image;
}

function generateDeck(){
    for (var i = 1; i <= 13; i++){
        window['Hearts' + i] = new card(i, 'Hearts');
        cards.push('Hearts' + i);
        window['Spades' + i] = new card(i, 'Spades');
        cards.push('Spades' + i);
        window['Clubs' + i] = new card(i, 'Clubs');
        cards.push('Clubs' + i);
        window['Diamonds' + i] = new card(i, 'Diamonds');
        cards.push('Diamonds' + i);                 
    }
}

2 个答案:

答案 0 :(得分:0)

您想将card个对象推送到数组:

function generateDeck(){
    for (var i = 1; i <= 13; i++){
        cards.push(
            new card(i, 'Hearts'),
            new card(i, 'Spades'),
            new card(i, 'Clubs'),
            new card(i, 'Diamonds')
        );
    }
}

答案 1 :(得分:0)

cards.push(变量)

你写了cards.push(&#39; hearts&#39; + i);

所以它是一个带有Number的String加法,它最终出现在一个名为hearts0或hearts1 ..

的字符串中

保存在数组下。

你不保存卡实例为什么你想知道卡[0] .displayName = undefined ??

尝试eval(&#34; cards.push(heart&#34; + i +&#34;)&#34;);

但那没人会做。

cards.push(windows [&#39; hearts&#39; + i]);但这也没有人为什么你想要全局