15

实例化的类如何访问 Document 类?

即使在我使用 Flash 中的属性栏命名 Document 类之后,尝试从其他类访问它通常也会失败,说“正在尝试访问未定义的属性......

一种解决方案是始终将 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 中的引用传递给要调用其方法的任何其他类/对象。一种更面向对象的方法是从您的其他类(Other)分派事件,以便 Main 类监听并调用其自身的适当方法。

如果您不关心保持良好的 OOP 结构并希望从已添加到显示列表的显示对象访问文档类,您可以尝试以下操作:stage.getChildAt( 0 );

于 2008-12-16T15:22:37.283 回答
4

只是一个旁注,但这个问题的最短答案是:任何类访问任何其他类的方式相同。也就是说,使用直接参考或静态曝光。在这方面,文档类与任何其他类没有什么不同。

于 2008-12-18T02:38:24.873 回答