2010-10-19 198 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对象。