【轉載的。。。。。。。。。。。。。。。】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的編譯器了