我正在制作一款我在高中时玩过的老游戏《毒品战争》的复制品。我有全局变量保存着每种药物的数量。最初,我只是对每种药物的每个买卖操作使用不同的函数。为了节省一些代码并提供一些规模功能,我想将其更改为一个函数,用于购买,传递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;
"全局"变量在浏览器中实际上是在窗口对象
JavaScript中的对象是关联数组。简单来说,这意味着您可以通过它的名称访问它的属性,就像在键值对
中一样。
您可以使用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>";