15

インスタンス化されたクラスはどのように Document クラスにアクセスできますか?

Flash のプロパティ バーを使用して Document クラスに名前を付けた後でも、他のクラスからそれにアクセスしようとすると、通常は失敗し、 「未定義のプロパティにアクセスしようとしています...

解決策の 1 つは、常にDocument クラスをそれ自体にキャストすることです。例えば。

Main(Main).globalMethod();

しかし、時にはこの恒星の落とし穴でさえ失敗することがあり、その場合は通常、明らかな問題を除いて抜け道がありません!

class Other{

   var parentClass:Main;
   public function Other(parent:Main){
       parentClass = parent;            // pointer to the Main class in a local var!

       Main(parentClass).globalMethod();
   }
}
4

3 に答える 3

22

ドキュメントクラス(Mainこの例では、)にシングルトンを使用できます。これにより、どこからでもインスタンスにアクセスできます。

public class Main extends Sprite {
    private static var _instance:Main;
    public static function get instance():Main { return _instance; }

    public function Main() {
        _instance = this;
       // etc...
    }

    // etc...
}

次に、次のようにMainインスタンスにアクセスします。

public class Other {
    public function Other() {
        Main.instance.usefulInstanceMethod();
    }
}

通常、使用可能なインスタンスのみが存在する必要があるため、ドキュメントクラスはシングルトンパターンのかなり良い候補です。

于 2008-12-17T03:39:34.953 に答える
4

ドキュメント クラスは、本質的にグローバルにアクセス可能なオブジェクトではありません。ドキュメント クラスにあるメソッドを呼び出したい場合は、Main からそのメソッドを呼び出したい他のクラス/オブジェクトへの参照を常に渡す必要があります。よりオブジェクト指向のアプローチは、他のクラス (その他) からイベントをディスパッチして、メイン クラスがリッスンし、それ自体で適切なメソッドを呼び出すことです。

適切な OOP 構造を維持することに関心がなく、表示リストに追加された表示オブジェクトからドキュメント クラスにアクセスしたい場合は、次のような方法を試すことができます。stage.getChildAt( 0 );

于 2008-12-16T15:22:37.283 に答える