請看看下面的代碼
var selected_id=1;
resetVar("selected");
function resetVar(foo){
foo+"_id"=0; // I want to set selected_id into 0
}
這可能嗎?任何建議?
請看看下面的代碼
var selected_id=1;
resetVar("selected");
function resetVar(foo){
foo+"_id"=0; // I want to set selected_id into 0
}
這可能嗎?任何建議?
您可以在擁有該方法的對象上使用square bracket notation函數調用函數(在您的情況中,全局函數window
對象)。
window['selected_id'] = value
如果選擇的是一個全局變量:
function resetVar(foo){
window[foo+"_id"] = 0;
}
這是一個「解決方案」經常被初學者提出的(這不是一件壞事,大家的地方開始)。答案是;不要這樣做,使用數組(或其他集合)。
使用的變量名,以確定程序邏輯是一個可怕的想法,這將不可避免地導致凌亂,難以維護的代碼。更改varibale的名稱不應改變程序的邏輯。相反,將obbjects分組到一個集合中,如果需要的話可以使用集合中的一個關鍵字,或者只是索引。
如果你的變量是全局變量,那麼它們是隱含的window
對象的屬性,可以參考它們作爲window
對象這樣的性質:
function resetVar(foo){
window[foo + "_id"] = 0;
}
var selected_id = 1;
resetVar("selected");
如果你的變量不是全局變量,那麼你將需要使它們成爲某些已知對象的屬性,以便你可以使用這種相同的技術。
一般情況下,這通常是一個糟糕的編程思想,我們常常看到這樣的問題,哪裏有更好的方法來處理這種情況。你不會透露整個情況是什麼,所以我們不能特別提供建議,但是你通常應該直接在已知對象上使用屬性,或者你應該使用一個數組來保存數組中的相關值,或者你應該只是直接引用變量。
這是不可能的,準確的方式,但你可以創建對象這樣的屬性名。當然,你也可以使用一個數組,它自然是數字索引的。 – Pointy 2012-04-25 20:56:21
要求解決高層次問題往往比要求我們解決您提出的解決方案中最後10%的問題要好得多。 – 2012-04-25 22:07:19