2010-10-19 206 views
3

我想創建一個新的變量,變量名, 例如:變量變量(創建與另一個變量的名稱變量)

function preloader(imglist) { 

    var imgs = imglist.split("|"); 

    for (i in imgs) { 

     var img_{i} = new Image; //this is the line where i sucked in! 
     img_{i}.src = imgs[i]; //another line where i sucked in! 

    } 
} 

preloader("asd.jpg|qwe.jpg|dorama.png"); 

我嘗試使用數組,但是,嗯..怎麼能我說...

var qwe = new Array(); 
qwe[1] = "asd"; //or not! whatever... 

var qwe[1] = new Image; // it didnt work! 

在PHPü可以使用這樣的:

$var1 = "test"; 
$var2_{$var1} = "test last"; 
echo $var2_test; //or... 
echo $var2_{$var1}; 
+1

爲什麼你想在變量上有一個唯一的名字?在你的例子中,我根本沒有看到用戶「動態變量名」的原因。只需使用普通的「var img = new Image();」 – Onkelborg 2010-10-19 15:18:14

+0

是的,你不需要唯一的名字 - 當你說'img = new Image()'時,它不會覆蓋舊的img值。你不需要這個PHP怪異。 – andrewmu 2010-10-19 15:33:55

回答

2

你並不需要不,在這裏,每個Image可以存儲和覆蓋得到同樣的預緊效果,但是僅僅這將工作:

function preloader(imglist) { 
    var imgs = imglist.split("|"); 
    for (var i=0; i<imgs.length; i++) { 
    new Image().src = imgs[i]; 
    } 
} 

注意,我改變了這個從for in循環,你應該使用普通索引for循環時遍歷數組(不枚舉)CMS已有a great answer here更詳細地解釋了這一點。

+1

嗯,它會工作,但'img'變量的作用域是函數,而不是'for'循環。 – 2010-10-19 15:24:19

+0

@Tim - 好點,更新雖然它甚至不需要它們,除非你打算使用它。 – 2010-10-19 15:27:30

+0

感謝您的答案,但爲什麼要循環?我的意思是當我像這樣使用:var imgs = Array(); imgs [1] =「asd」; imgs [2] =「qwe」;/*然後*/var i; for(i in imgs){document.write(imgs [i] +「
」); } //正在工作...... – mrtakdnz 2010-10-20 07:28:51

0

您可以通過使用​​功能,如下圖所示achive你的目標;

var data = "testVariable"; 
eval("var temp_" + data + "= new Array();"); 
temp_testVariable[temp_testVariable.length]="Hello World"; 
alert("Array Length: " + temp_testVariable.length); 
alert("Array Data: " + temp_testVariable[0]); 

當然,這並不意味着這是正確的解決方案。我剛纔給出了關於這個能力的信息。

這裏是article包含上述示例和替代解決方案使用Window對象。