2017-09-07 12 views
1

サブクラスのプロパティを変更したいので、サブクラスを別の関数にパラメータとして渡すことをお勧めします。Actionscript 3:パラメータとしてクラスを渡す

具体的に私は、通常のサブクラスに、メインクラスの私有財産を作り、それをそのようにアクセスします

alpha = 0.5; 

にクラスを設定したいです。しかし、私はこれが良い方法か悪い方法かと思ったのですか?

 var d:DElem = new DElem(text);   
     addChild(d); 
     d.addEventListener(MouseEvent.CLICK, Proxy.add(this, click, d)); 


     private function click(event:MouseEvent, elem:DElem):void { 
      Animate.fadeOutIn(elem); 
     } 
+1

あなたに超簡単な例を追加できますあなたの質問には、使用したいクラス構造が含まれます –

+0

私は例を追加しました。 – seventeen

+1

あなたの例では、関数に 'elem'を渡す必要はありません。 'event.currentTarget'または' event.target'から取得できます –

答えて

2

あなたのコードを見ると、私は間違いなくを推奨します。です。共有したコードがアプリケーション全体で一度しか実行されない場合を除き、おそらくメモリリークが発生します。

イベントリスナーをオブジェクトに追加すると、そのイベントリスナーはガベージコレクションの準備ができていても(それ以上使用されていなくても)オブジェクトをメモリに保持します。匿名関数(おそらくProxy.addから返されるもの)をイベントリスナーに追加すると、イベントリスナーを簡単に削除できません。d.removeEventListener(MouseEvent.CLICK, Proxy.add(this, click, d))を実行するとProxy.addは新しい/別の関数を返すため、機能しません

弱フラグ(5番目のパラメータ)にtrueを渡すことができますが、これは、リスナーを追加したときと同じですが、リスナーを追加したときと同じです。あなたのリスナーを追加するとき:

frとするオブジェクトを考え出すリスナーを無視するのFlashPlayerを伝え
d.addEventListener(MouseEvent.CLICK, Proxy.add(this, click, d), false, 0, true); 

メモリからのee。これによりメモリリークの可能性は低くなりますが、依然として非常にクリーンな方法ではありません。常に弱フラグを使用するか、不要になったときには常に明示的にリスナーを削除することをお勧めします。

コメントや他の回答で示唆したように、あなたが実際にあなたのProxyクラスを使用する必要はありません、以下はあなたが好きなものを達成するでしょう:

d.addEventListener(MouseEvent.CLICK, click, false, 0, true); 

private function click(event:MouseEvent):void { 
    Animate.fadeOutIn(event.currentTarget as Sprite); 
    //event.currentTarget is a reference to the Object that you attached the listener to 
    //event.target is the object that actually dispatched the event, which could be the same as event.currentTarget, or a child of it 
} 
+0

ありがとう、それは素晴らしい説明です。 – seventeen

1

はい、それはあなたのアプリケーションアーキテクチャに応じて、良い習慣です:このように

。 メソッドパラメータとしてクラスを送信できる状況はたくさんあります。しかし、あなたのコードを見れば、クラスをパラメータとして送信するのではなく、DElemクラスのインスタンスを送信することになります。これもまた良い方法です。 イベントの中には、event.targetまたはevent.currentTargetでアクセスできるターゲット(マウスイベント)が含まれているものがあります。ただし、コンパイル時エラーを取得するには、メソッドパラメータとして型指定されたターゲットを送信する方が便利かもしれません。

関連する問題