我最近加入了大量的增量/ IDLE浪潮,并希望用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>
这就是我想要的&#34;用这个功能购买它们:
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控制台中得到它:
未捕获的ReferenceError:未定义棒
这个没有&#34; &#34;
未捕获的TypeError:无法读取属性&#39;成本&#39;未定义的
这个与&#34; &#34;
答案 0 :(得分: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
,则会在foo
中查找属性weapon
,但您真正想要的是在weapon
中找到与{的值相匹配的属性{1}}所以我们foo
。它被称为括号表示法。你可以read more about the differences on MDN。