2012-07-03 48 views
4

考慮這個簡單的AS3類。構造函數之外的實例化之間有任何區別嗎?

package 
{ 
    import flash.display.Sprite; 
    import flash.display.MovieClip; 

    public class MySprite extends Sprite 
    { 
     private var someMC:MovieClip = new MovieClip(); 

     public function MySprite() 
     { 
       super(); 

       addChild(someMC); 
     } 
    } 
} 

這一個:

package 
{ 
    import flash.display.Sprite; 
    import flash.display.MovieClip; 

    public class MySprite extends Sprite 
    { 
     private var someMC:MovieClip; 

     public function MySprite() 
     { 
       super(); 

       someMC = new MovieClip(); 
       addChild(someMC); 
     } 
    } 
} 

這是同樣的事情,或者是有更多的東西?

我想這是因爲在第一個例子中,MovieClip似乎在調用構造函數之前就已經存在(何時發生這種情況,有什麼好處?)。

回答

4

這一切都是一樣的。編譯器將你的第一個例子翻譯成第二個例子。唯一的區別是,您可以在將賦值語句放入構造函數中時控制實例化順序。

+0

非常感謝您的快速回復! – user1059939

0

Actionscript是一種相當高級的語言,只要你不摒棄它的垃圾收集,往往會對你可以拋出的大部分東西感到非常冷淡。話雖如此,甚至更低級的語言往往不關心你做什麼,所以它真的歸結爲一個風格問題。個人而言,我嘗試只初始化常量和變量,我想調整經常在構造函數之上的初始值;這樣他們很容易被發現和改變,並且不會被大量的new this和()混淆。

+0

謝謝桑迪。我傾向於不惜一切代價避免第一個例子,但正如你所說,有時候看起來更清晰。對這些差異產生懷疑(或者它的工作原理)總是讓我惱火。 – user1059939

+0

我在同一條船上 –

相關問題