2

我正在制作一个我在高中玩的旧游戏的复制品,叫做药物战争。我有全局变量来保存每种药物的数量。最初我只是为每种药物的每次买卖操作使用不同的功能。试图为自己节省一些代码并提供一些扩展能力,我想将其更改为一个用于购买的函数,传递药物数量、药物价格(由不同的函数完成)和药物名称。

我坚持的部分是尝试将 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;

}
}

再次感谢您的所有帮助!

4

3 回答 3

1

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

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

window[drugname + "qty"] = drugqty;

这有效,因为

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

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

于 2013-01-08T08:12:14.670 回答
0

您可以为此使用该eval()功能:

eval(drugname+"qty"=drugqty);

注意:学习面向对象编程会更好。所以你可以制作一个Drug 和这个类的类实例(对象)来存储特定的药物信息。轻松绕过这些课程并跟踪信息!

于 2013-01-08T07:58:48.787 回答
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>";
于 2013-01-08T07:59:57.783 回答