2013-07-31 128 views
0

我有一個對象,具有約30「價值」或不管他們是所謂的,例如:是否有可能引用變量

var list = new Object(); 
list.one = 0; 
list.two = 0; 
list.three = 0; 
... 
list.thirty = 0; 

在那裏對我來說,能夠增加一個簡單的/有效的方法列表對象的值?例如,假設有100個按鈕,如果按下每個按鈕都會將該值增加一定量。我正在試圖做的是一個簡短的功能,如:

function test(value, amount, math) { 
    if(math === "add") { 
    value += amount; 
    } else if(math === "sub") { 
    value -= amount; 
    } 
} 

而是整個價值的東西不工作=(我能想到的這樣做是創造30個函數唯一的其他方式,每個函數來進行。與上面相同,但每一個都指定要添加或減去的列表值,或者使用if ===「one」然後list.one來創建一個單一函數等等任何其他想法?我想過使用數組,但是我寧願具有代碼易於閱讀,因爲列表值有一個很容易讓我在其他功能上的具體名稱。

預先感謝任何幫助

+1

'var list = new Object();'所以它不是一個列表...無論如何,你是否知道JavaScript中的數組? – gdoron

+0

我認爲使用數組是最適合您的解決方案。永遠不要執行計算機的工作(從list.one手動寫入list.thirty) – boyd

+0

您的函數無法工作,因爲值已解析爲值。雖然不完全正確,但Javascript或多或少地通過引用傳遞數組和對象,但是數值和字符串是有價值的。 – Paul

回答

1

是否有可能引用一個變量?

不,但可以引用一個對象,並使用variable property names。這實際上是你已經有了,所以你可以在你的功能改變

function test(value, amount, math) { 
    if(math === "add") { 
     list[value] += amount; 
    } else if(math === "sub") { 
     list[value] -= amount; 
    } 
} 

與​​7607545,而不是test(list.one, 100, "add")調用它。順便說一句,我建議只使用負值而不是add/sub動詞。

+0

感謝您詳細描述它,正是我所期待的。 –

+0

負值的好點也會導致我失敗。謝謝。 –

5

嘗試是這樣的:

function test(obj, name, amount, math) { 
    switch (math) { 
    case "add": 
     obj[name] += amount; 
     break; 
    case "sub": 
     obj[name] -= amount; 
     break; 
    } 
} 

例如使用調用它::

function inc(value,amount) { 
    list[value] += amount; 
} 
+0

謝謝,我一直在尋找的東西 –

1

您可以通過名稱作爲一個字符串訪問屬性

test(list, "one", 1, "add"); 
+0

謝謝你,我一直在尋找的東西 –

1
list[value] += amount; 

如果值是像「一」,「二」的字符串,等等

你也可以通過在對象遞增:

function(obj, value, amount, math) { 
    obj[value] += math; 
} 

但你可能應該使用數組+循環/重構。

相關問題