在不使用变量名的情况下更新Javascript函数中的全局变量

时间:2013-01-08 07:54:34

标签: javascript html

我正在制作一个我在高中玩过的旧游戏的复制品,名为“药物大战”。我有全局变量来保存每种药物的数量。最初我只为每种药物的每次买卖操作使用了不同的功能。试图为自己保存一些代码并提供一些扩展能力,我想把它改成一个购买功能,传递药物,药物价格(由不同的功能完成)和药物。

我坚持使用的部分是尝试将drugqty(在函数中本地使用)更新为全局变量。

function buy(drugqty, drugprice, drugname)
{
if (money < drugprice)
{
    window.alert("You do not have enough money to do that!")
}
else if(money >= drugprice)
{
var maxdrug = money/drugprice;
var addtoqty;
addtoqty=prompt("How many would you like to purchase? They are $" + drugprice +" a unit. You can afford " + Math.floor(maxdrug) + "." );
if((addtoqty*drugprice)>money)
{
    window.alert("Nice try you need more money to do that!")    
}
else {

drugqty = parseInt(drugqty, 10) + parseInt(addtoqty, 10);
money =  money - (drugprice*addtoqty);
document.getElementById(drugname+"qty").innerHTML=drugqty;
document.getElementById("money").innerHTML=money;

}
}

}

以下是我购买某种特定药物的按钮。

<td><center><button onclick="buy(cocaineqty, cocaine, 'cocaine')">Buy</center></button></center></td>

按下按钮时,它会调用该功能并正确执行。

我只需要弄清楚如何使用本地函数drugqty创建的全局变量cocaineqty来更新。

我尝试过像

这样的事情
drugname+"qty"=drugqty;

我的两个想法是再次从显示的位置解析该信息或以某种方式更新函数中的全局变量(将来再次将其用于多种药物,以便可以动态完成)

<td id="cocaineqty" align="center">0</td>

我在这里的第一篇文章,但我非常愿意更改或更正帖子中的任何错误。谢谢你的时间!

编辑:根据选中的答案更新了我的代码以获取正确的信息

function buy(drugqty, drugprice, drugname)
{
if (money < drugprice)
{
    window.alert("You do not have enough money to do that!")
}
else if(money >= drugprice)
{
var maxdrug = money/drugprice;
var addtoqty;
addtoqty=prompt("How many would you like to purchase? They are $" + drugprice +" a unit. You can afford " + Math.floor(maxdrug) + "." );
if((addtoqty*drugprice)>money)
{
    window.alert("Nice try you need more money to do that!")    
}
else {

drugqty = parseInt(drugqty, 10) + parseInt(addtoqty, 10);
money =  money - (drugprice*addtoqty);
document.getElementById(drugname+"qty").innerHTML=drugqty;
document.getElementById("money").innerHTML=money;
window[drugname+"qty"]=drugqty;

}
}

再次感谢您的所有帮助!

3 个答案:

答案 0 :(得分:1)

首先,他们实施的方式并不令人敬畏。有很多可以做得更好,但我不会试图改变你在这里的实施...... :)

要做你想做的事情,即在不知道其实际名称的情况下访问全局变量,可以这样做。

window[drugname + "qty"] = drugqty;

这是因为

  1. 浏览器中的“全局”变量实际上位于窗口对象

  2. JavaScript中的对象是关联数组。简单来说,这意味着您可以通过其名称访问其属性,就像在键值对

  3. 中一样

答案 1 :(得分:0)

您可以使用eval()功能:

eval(drugname+"qty"=drugqty);

注意:了解面向对象编程会好得多。因此,您可以创建此类的Drug class和类实例(对象)来存储特定的药物信息。这些课程很容易传递并跟踪信息!

答案 2 :(得分:0)

您可以将所有数量保存在单个对象中,并为每种药物添加一个属性。

var quantities = {};
quantities[drugname + "qty"] = drugqty;

但是,如果你想显示结果,可能更容易省略“数量” - 部分:

var quantities = {};
quantities[drugname] = drugqty;

显示结果:

var html = "<table>";
for (var quantityName in quantities) {
  if (quantities.hasOwnProperty(quantityName)) {
    html += "<tr><td>" + quantityName + "</td>";
    html += "<td id='" + quantityName + "qty' align='center'>" + quantities[quantityName] + "</td></tr>";
  }
}
html += "</table>";