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

2 に答える 2

4

それはすべて同じです。コンパイラは、最初の例を 2 番目の例に変換します。唯一の違いは、代入をコンストラクターに入れるときにインスタンス化の順序を制御できることです。

于 2012-07-03T08:42:34.627 に答える
0

Actionscriptガベージコレクションを怒らせない限り、かなり高水準の言語であり、投げることができるほとんどのものでかなり冷静になる傾向があります. そうは言っても、低レベルの言語でさえ、どちらの方法で行うかを気にしない傾向があるため、実際にはスタイルの問題になります.

個人的には、初期値を微調整したい定数と変数のみを初期化するようにしています。多くの場合、コンストラクターの上にあります。そうすれば、それらは簡単に見つけて変更でき、あれnewやこれや()で混乱することはありません。

于 2012-07-03T08:47:39.007 に答える