Javascript 从onclick函数为对象赋值

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 } } 这是我

我正在尝试创建一个函数来处理升级的购买。通过将对象作为参数传递给函数(up)和升级值(amount),可以确定特定的升级目标

这是我的播放器对象:

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 )