Javascript 从onclick函数为对象赋值
我正在尝试创建一个函数来处理升级的购买。通过将对象作为参数传递给函数(up)和升级值(amount),可以确定特定的升级目标 这是我的播放器对象:Javascript 从onclick函数为对象赋值,javascript,function,object,button,Javascript,Function,Object,Button,我正在尝试创建一个函数来处理升级的购买。通过将对象作为参数传递给函数(up)和升级值(amount),可以确定特定的升级目标 这是我的播放器对象: var player = { tech: 0, energy: 0, upgrades:{ engi5Perc: 0, engi25Perc: 0, andro5Perc: 0, andro25Perc: 0, robot5Perc: 0, robot25Perc: 0 } } 这是我
var player = {
tech: 0,
energy: 0,
upgrades:{
engi5Perc: 0,
engi25Perc: 0,
andro5Perc: 0,
andro25Perc: 0,
robot5Perc: 0,
robot25Perc: 0
}
}
这是我的职责:
function buyUpgrade(techcost, energycost, up, amount){
if(techcost <= player.tech && energycost <= player.energy){
player.tech -= techcost;
player.energy -= energycost;
up = amount;
console.log("Done, upgrade purchased");
}
}
功能购买升级(techcost、energycost、up、amount){
如果(techcost您当前正在将金额分配给字符串“player.upgrades.engi5Perc”
。这不起作用
但您可以使用方括号来表示某些对象的属性,这些属性的名称只有在运行时才知道,例如,obj[propertyName]=value
下面是更多的例子来说明区别:
var obj = {foo: 'bar'};
var propertyName = 'foo';
// the following two assignments are essentially equal:
obj.foo = 'newBar';
obj[propertyName] = 'newBar';
// while this one is obviously assigning 'newBar' to the wrong property:
obj.propertyName = 'newBar';
// and this is what happens in your function:
'obj.foo' = 'newBar';
试试这个:
function buyUpgrade(techcost, energycost, up, amount){
if(techcost <= player.tech && energycost <= player.energy){
player.tech -= techcost;
player.energy -= energycost;
player.upgrades[up] = amount;
console.log("Done, upgrade purchased");
}
}
EnII5PrC’<代码>只是一个字符串。它不访问<代码>播放器< /Cord>对象。你也应该考虑使用事件处理程序,而不是使用<代码> OnCase属性。事件处理程序现在更恰当地向HTML元素添加事件吗?@ KoSman是注册的。事件处理程序更好。它对JS和HTML进行了更清晰的分离,允许更轻松地注销处理程序,当然还有同一对象上的多个事件处理程序。此外还有内容安全策略
HTTP头,其中包括不允许浏览器执行内联脚本以使XSS攻击更加困难。为了使用此功能,您自己的脚本需要与HTML完全分离。
function buyUpgrade(techcost, energycost, up, amount){
if(techcost <= player.tech && energycost <= player.energy){
player.tech -= techcost;
player.energy -= energycost;
player.upgrades[up] = amount;
console.log("Done, upgrade purchased");
}
}
buyUpgrade(1, 1, 'engi5Perc', 0.005 )