从onclick函数为对象赋值

时间:2015-08-03 11:08:20

标签: javascript function object button

我正在尝试创建一个功能来处理购买升级。通过将对象作为参数传递给函数(向上)和升级值(金额)来完成特定升级。

这是我的玩家对象:

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");
  }
}

我的HTML:

<button type="button" onclick="buyUpgrade(1, 1, 'player.upgrades.engi5Perc', 0.005 )">Buy 5%</button>

我的功能中必定存在某种简单的错误,我花了很多时间试图解决它。到目前为止没有运气。

1 个答案:

答案 0 :(得分:3)

您目前正在将金额分配给字符串'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");
  }
}

并仅使用升级名称调用该函数:

buyUpgrade(1, 1, 'engi5Perc', 0.005 )