【转载的。。。。。。。。。。。。。。。】this
在AS3中,咱们能够用getChildByName来获取一个元件,可是要注意返回的类型是DisplayObject,这样一旦咱们的元件中有一些自定义的方法就不能使用了。spa
好比我有一个类Ball,Ball有一个方法move,那么我能够这样写:对象
var b:Ball=new Ball();ip
addChild(b);字符串
b.move();//这样没问题get
getChildByName(”b”).move();//这样编译时会报错编译器
其缘由应该就是getChildByName返回的类型是DisplayObject,而并非Ball,因此没法调用Ball的方法。编译
若是这样写:class
var c:Ball= getChildByName(”b”) as Ball;方法
c.move();
这样就没问题了,编译经过,能够调用Ball的方法。
下面是我本身的总结:
getChildByName方法是用于元件动态命名时的。例如:在场景中有一个元件,在属性面板中对其命名为cc,在对其操做时就能够写 cc.y=XXX;而动态命名时,就如上面的例子,场景中本没有这个元件,用addChild将其放到场景中时再对其命名,这时要对这个元件进行操做就要 用到getChildByName了,再举例以下:
var b:Ball=new Ball()
addChild(b)
b.name="mc1"
getChildByName("mc1").y=200
补充:
例如场景中有一元件mc1,如今用一个字符串来表示它,而且利用这段字符串来调用它的属性或方法:
var cc="mc1"
getChildByName(cc).XXX
这时若是是自定义的属性或方法的话,会报错,由于AS3认不出来被操做的对象是何类型的,这就须要咱们来告诉它,有两种方法解决这个问题:
1、将getChildByName(cc)改为MovieClip(getChildByName(cc)),意思是先用getChildByName 将cc这个字符串变成DisplayObject,而后再将它变为MovieClip,这时AS3认出它是一个MovieClip了,就能够访问它的属性 和调用它的方法了。
2、将语句写成:
var cc:MovieClip=mc1
this["cc"].XXX
另外还有一种字符串的写法:
var cc=mc1.name
this["cc"].XXX
这里mc1.name必须是在属性面板里命名的,而不是mc1.name="XXX"命名的
[]在这里就是动态的意思,被操做的对象的类型是动态的,这样就能够绕过AS3的编译器了