2012-04-25 63 views
0

可能重複:
Javascript Variable Variables的Javascript通過設置變量變量名

請看看下面的代碼

var selected_id=1; 
resetVar("selected"); 

function resetVar(foo){ 
foo+"_id"=0; // I want to set selected_id into 0 
}​​​​​ 

這可能嗎?任何建議?

+1

這是不可能的,準確的方式,但你可以創建對象這樣的屬性名。當然,你也可以使用一個數組,它自然是數字索引的。 – Pointy 2012-04-25 20:56:21

+0

要求解決高層次問題往往比要求我們解決您提出的解決方案中最後10%的問題要好得多。 – 2012-04-25 22:07:19

回答

2

您可以在擁有該方法的對象上使用square bracket notation函數調用函數(在您的情況中,全局函數window對象)。

window['selected_id'] = value

3

如果選擇的是一個全局變量:

function resetVar(foo){ 
    window[foo+"_id"] = 0; 
}​​​​​ 
1

這是一個「解決方案」經常被初學者提出的(這不是一件壞事,大家的地方開始)。答案是;不要這樣做,使用數組(或其他集合)。

使用的變量名,以確定程序邏輯是一個可怕的想法,這將不可避免地導致凌亂,難以維護的代碼。更改varibale的名稱不應改變程序的邏輯。相反,將obbjects分組到一個集合中,如果需要的話可以使用集合中的一個關鍵字,或者只是索引。

8

如果你的變量是全局變量,那麼它們是隱含的window對象的屬性,可以參考它們作爲window對象這樣的性質:

function resetVar(foo){ 
    window[foo + "_id"] = 0; 
}​​​​​ 

var selected_id = 1; 
resetVar("selected"); 

如果你的變量不是全局變量,那麼你將需要使它們成爲某些已知對象的屬性,以便你可以使用這種相同的技術。

一般情況下,這通常是一個糟糕的編程思想,我們常常看到這樣的問題,哪裏有更好的方法來處理這種情況。你不會透露整個情況是什麼,所以我們不能特別提供建議,但是你通常應該直接在已知對象上使用屬性,或者你應該使用一個數組來保存數組中的相關值,或者你應該只是直接引用變量。