2009-11-25 106 views
1

我好奇的代碼在我的ActionScript項目:ActionScript動態類型?

public var _p:Object 
... 
在功能

public function WObject(pp:MovieClip) 
{ 
    _p = pp; 
    _p.Play(); 
} 

Play()功能是MovieClip但不Object; ActionScript可以允許這樣的語法嗎?

回答

0

由於任何AS3對象都是Object的子項,因此可以將MovieClip向下轉換爲Object。這可能是由於AS3對象的動態特性(因爲AS3基於ECMAScript),它允許您在包含MovieClip的對象上調用諸如play()之類的方法,而無需編譯器/播放器向您投擲尖銳的對象。

說了上面所述,通常是一種很好的做法而不是以這種方式向下傾倒,除非絕對必要,因爲這往往會使代碼更難以理解和維護。

其他考慮因素是編譯時類型檢查和代碼提示(參數提示,代碼完成等)。如果您選擇向下轉換爲對象,這些選項將無法使用。

+0

謝謝你的回答,我還有另一個問題。是動作腳本完全動態的,這意味着該文件可以通過編譯,甚至編譯器無法找到一個方法的定義,如: 公共變種_p:對象... 的功能: 公共職能WObject(pp:MovieClip){_p = pp; _p.PlayB(); } PlayB不是MovieClip的成員,而是從MovieClip派生的類的成員。在運行時,我會將派生類的實例傳遞給WObject。此代碼是否可以傳遞動作腳本編譯器? – 2009-11-25 02:50:27

+0

是的。根據你所描述的,它應該工作得一樣。試試看看。 – 2009-11-25 11:22:19

+0

哇,真酷 – 2009-11-26 02:18:15