2013-01-08 38 views
2

我正在研究一個我在高中稱爲「毒品戰爭」的舊遊戲的複製品。我有全球變量,持有所擁有的每種藥物的數量。最初,我對每種藥物的每次買賣都使用了不同的功能。爲了節省自己的一些代碼並提供一定的擴展能力,我希望將其改爲一種購買功能,通過藥品,藥品(通過不同的功能完成)和藥品名稱。在不使用變量名的情況下更新Javascript函數中的全局變量

我堅持的部分是試圖將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; 

} 
} 

感謝您的幫助的正確的信息!

+0

歡迎來到SO!數量不錯的細節和代碼片段。保持! – Veger

回答

1

首先,他們實現的方式並不可怕。有很多可以做得更好,但我不會試圖改變你在這裏的實現...:)

要做你想做的事,即訪問一個全局變量而不知道它的實際名稱,可以這樣做。

window[drugname + "qty"] = drugqty; 

這工作,因爲在瀏覽器中

  1. 「全局」 變量實際上是window對象在JavaScript

  2. 對象是關聯數組上。簡而言之,這意味着您可以通過它的名稱訪問其屬性,就像在Key Value對中一樣

+0

對於我實施得不好的想法,這是我尋找的解決方案。感謝您的幫助。我會很好奇你將如何改變一些實現,或者只是想法,以及如何改正。 – mcfunk

0

可以使用eval()功能如下:

eval(drugname+"qty"=drugqty); 

:這將是更好的瞭解面向對象的編程。所以你可以製作一個Drugclass和這個類的類實例(對象)來存儲特定的藥物信息。很容易繞過這些課程並跟蹤信息!

+0

面向對象,好電話看起來像Jacco剛剛發佈的,我將不得不看看謝謝你的迴應! – mcfunk

+0

[Jacco](http://stackoverflow.com/a/14210583/246263)使用了一個數組,它是一個'in between':) – Veger

+0

哦,那麼這就表明了我的經驗:P我感謝你的幫助! – mcfunk

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

我將不得不深入到這一點,但我相信這是我需要與它一起頭。謝謝你的時間和響應! – mcfunk

+0

我有幾個關於這個的問題給你,這是製作一個數組,它會被歸類爲一個鋸齒形數組嗎?我只是在這裏學習,但它似乎沒有定義大小,並且是位置數組是什麼創建的行數量[藥物名稱+數量] =藥物數量「? – mcfunk

+0

是的,這被分類爲鋸齒狀數組:http://stackoverflow.com/questions/5939504/how-to-initialize-a -jagged-array-in-javascript。你能澄清一下這個問題:「數組中的位置是用什麼行創建的?」?我不明白你在找什麼信息 – Jacco

相關問題