2015-06-04 79 views
0

我最近加入了大增量/ IDLE wave,並且想要在使用Javascript的同時進行一些小項目,以便更多地學習它並停止像奴隸一樣的教程,並嘗試學習我做,並使用我的舊技能。幾個對象的一個​​函數

我會說我體面的谷歌的東西,但這次,我投降提出一個問題。無法找到正確的單詞或「語法」谷歌。

這是我的問題:

我有一個對象(?):

var weapon = { 
    stick:  { cost: 50, attack: 1, owned: 0 }, 
    mace:  { cost: 250, attack: 5, owned: 0 }, 
    sword:  { cost: 1000, attack: 15, owned: 0 }, 
    bow:  { cost: 4000, attack: 50, owned: 0 } 
}; 

這就像我的 「升級」。

<button onclick='buyWeapon("stick")' class="btn btn-info btn-block">BUY STICK (COST: <span id="stickCost">x</span>)</button> 

<button onclick='buyWeapon(stick)' class="btn btn-info btn-block">BUY STICK (COST: <span id="stickCost">x</span>)</button> 

這是我 「要」 購買,使用此功能:

function buyWeapon(foo) { 
    if (gamedata.player.currency >= weapon.foo.cost) { 
     gamedata.player.currency -= weapon.foo.cost; 
     weapon.foo.owned++; 
     weapon.foo.cost *= 1.10; 
     gamedata.player.attack += weapon.foo.attack; 
    } else { 
     window.alert("Not enough cash!"); 
    }; 
}; 

當我嘗試這個,我得到這個在JS控制檯:

Uncaught ReferenceError: stick is not defined

這一個沒有「」

Uncaught TypeError: Cannot read property 'cost' of undefined

這一個帶有「」

回答

1

首先,您需要在您的onclick屬性正確使用引號。

<button onclick="buyWeapon('stick')" class="btn btn-info btn-block">BUY STICK (COST: <span id="stickCost">x</span>)</button> 

您所遇到的問題存在,如果沒有引號stick它被視爲一個變量,而不是一個字符串。

其次,在buyWeapon函數中,您需要正確引用武器對象中的對象。

weapon[foo].cost 

如果你weapon.foo.cost然後在好轉屬性fooweapon,但你真正想要的是找到weapon那的foo所以我們做weapon[foo]的值相匹配的屬性。它被稱爲括號表示法。您可以read more about the differences on MDN

+0

當我讀到這篇文章時,我實際上已經意識到了答案,因爲我在另一個文章中看到了很多這樣的內容。但是,謝謝你的快速回答。所以現在我要做的下一件事是擺脫大浮動的^^, – kongebra

相關問題