从较低级别检索变量值

时间:2011-08-23 03:33:49

标签: actionscript-3 variables this undefined root

我在主舞台级别创建了一些变量,如下所示:

for(i=0,i<10,i++){
    var var_name="var_num_"+i;
    this[var_name]="some value";
}//<-----------------------------------------------------works

所以我得到10个名为“var_num0”,“var_num1”,“var_num2”的变量,每个变量都有一些值。 我可以在任何调用此地址的地方访问它们

var second_var=MovieClip(root).var_num0;//<--------------works

当我想从较低级别或其他框架或其他地方使用另一个循环调用所有变量时,我的问题出现了:

var third_var;
for(j=0,j<3,j++){
third_var=this["MovieClip(root).var_num_"+j];//<---------DOSNT WORK
trace(this["MovieClip(root).var_num_"+j]);//<------------returns "undefined"
}

我该怎么做才能做到这一点?我尝试了很多东西而没有......

谢谢大家

2 个答案:

答案 0 :(得分:0)

在您的情况下,“root”和“this”都是您要从中访问变量的范围。所以试试这个:

var third_var:MovieClip;
for(j = 0; j < 3; j++)
{
    third_var = MovieClip(root)[var_num_ + j];
    trace(third_var);
}

此外,你应该在for循环中使用分号而不是角色。

答案 1 :(得分:0)

我想在我的回答中提出一个建议,即你在AS3中使用'Document Class'来使命名空间和继承更加清晰。在使用基于文档的面向对象编程与通过Flash IDE提供的时间线编程(由于AS1 / 2仅在那里)时,您确切知道可以访问的位置。啧:http://www.kirupa.com/forum/showthread.php?223798-ActionScript-3-Tip-of-the-Day/page14

回答:您正在尝试在一组[]中移动两级继承。另一种编写第一个“不工作”行的方法是:

this.myMovieClip["var_num"+j"];

您还可以使用:this["MovieClip"]["var_num"+j];

基本上,您需要从用于调用变量的字符串中取出“MovieClip(root)”,因为您正在通过两个级别的继承:this-&gt; MovieClip-&gt; targetVar

您需要使用两个句点,一个句点和一个方括号或两个方括号来移动两个级别的继承。句点.和一组方括号[]都可以完成更深层移动一个级别的任务,因此将.放在用于调用变量的字符串中将不起作用。

说明:

以下三个示例都返回相同的变量:

myMovieClip.my_variable

myMovieClip["my_variable"]

var str:String = "my_variable";
myMovieClip[str];