2011-06-16 78 views
1

我试图将字符串转换为实例名称。将字符串转换为对象实例名称

stage.focus = ["box_"+[i+1]]; 

这给了我回= box_2;

但我需要它是一个对象而不是字符串。

在as2中,我可以使用eval。我如何在as3中执行此操作?

回答

8

正确的语法是:

this["box_"+(i+1)] 
+0

+1在我的回答中,我在这之后加了'.',并删除了我的答案。 – 2011-06-16 12:43:01

+0

谢谢,丹妮!如果事实是正确的语法! \t \t \t \t \t \t stage.focus = this [“box _”+(i + 1)]; – Mario 2011-06-16 14:34:09

1

例如,如果你想调用的函数“开始”,在您的主类,你会做这种方式:

this["start"](); 

同东西去变量。由于所有类都是Object的子类,因此可以像使用普通对象一样检索它们的变量。像这样的类:

package{ 
    import flash.display.Sprite; 
    public class Main extends Sprite{ 
     public var button:Sprite; 

     public function Main(){ 
      trace(this["button"]); 
     } 
    } 
} 

将输出:

[object Sprite] 
0

如果要访问当前类的成员,已经给出的答案会工作。但是,如果你正在寻找的实例不是班级的一部分,那么你运气不好。

例如:

private function foo():void { 
    var box_2:Sprite; 
    trace(this["box_"+(i+1)]); 
} 

就不行,因为box_2是不是类的一部分。在这种情况下,强烈建议使用数组。

如果要访问DisplayObject(例如,Sprite或MovieClip),也可以使用getChildByName。但在这种情况下,box_2将是对象的名称,而不是变量的名称。你设置的名称像

var box:Sprite; 
box.name = "box_2"; 

但是,我再次推荐一个数组。

+0

谢谢你的回答! – Mario 2011-06-16 14:30:44

+0

我有一个数组,我想要的是,在box_1上键入后,如果它是正确的,将焦点更改为box_2 ... – Mario 2011-06-16 14:32:01

+0

它与stage.focus = this [“box _”+(i + 1)]; – Mario 2011-06-16 14:32:56