更新Javascript函数中的全局变量而不使用变量名



我正在制作一款我在高中时玩过的老游戏《毒品战争》的复制品。我有全局变量保存着每种药物的数量。最初,我只是对每种药物的每个买卖操作使用不同的函数。为了节省一些代码并提供一些规模功能,我想将其更改为一个函数,用于购买,传递drugty, drugprice(由另一个函数完成)和drugname。

我所坚持的部分是试图将drugty(在函数中局部使用)更新为全局变量。

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创建的内容更新全局变量cocainity。

我尝试了

drugname+"qty"=drugqty;

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

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

这是我在这里的第一个帖子,但我非常愿意修改或纠正帖子中的任何错误。谢谢你的时间!

edit:根据选中的答案为正确的信息更新了我的代码

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

再次感谢您的帮助!

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

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

window[drugname + "qty"] = drugqty;

  1. "全局"变量在浏览器中实际上是在窗口对象

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

  4. 中一样。

您可以使用eval()函数:

eval(drugname+"qty"=drugqty);

注意:学习面向对象编程会更好。因此,您可以创建一个Drug类和该类的类实例(对象)来存储特定的药物信息。这是很容易传递这些类和跟踪信息!

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

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

但是,如果您也想显示结果,省略"qty"部分可能会更容易:

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

最新更新