Flash 在AS3中访问文档类

Flash 在AS3中访问文档类,flash,actionscript-3,oop,class,document-class,Flash,Actionscript 3,Oop,Class,Document Class,实例化类如何访问文档类? 即使在我使用Flash中的属性栏为文档类命名后,尝试从其他类访问文档类通常也会失败,比如“尝试访问未定义的属性 一种解决方案总是将文档类强制转换为自身!例如 Main(Main).globalMethod(); 但有时,即使是这一次的星光之旅也失败了,而且除了显而易见的事情之外,通常没有出路! class Other{ var parentClass:Main; public function Other(parent:Main){ par

实例化类如何访问文档类?

即使在我使用Flash中的属性栏为文档类命名后,尝试从其他类访问文档类通常也会失败,比如“尝试访问未定义的属性

一种解决方案总是将文档类强制转换为自身!例如

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();
   }
}

document类本质上不是一个全局可访问的对象。如果要调用document类中的方法,则必须始终将引用从Main传递到要调用其方法的任何其他类/对象。更面向对象的方法是从其他类(其他类)分派事件让主类侦听并调用其自身的适当方法


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

您的文档类可以使用单例(
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();
    }
}

document类是singleton模式的一个很好的候选者,因为通常只有实例可用。

只是一个旁注,但这个问题的最短答案是:任何类访问任何其他类的方式都是相同的。也就是说,使用直接引用或静态公开。document类与在这方面,rom是任何其他类。

在主类中是否真的需要“instance()”属性?我的意思是,您不能只访问“\u instance”吗“指针变量?那不是一个单例,更像是一个单状态。Jeremy:实例属性函数只是确保只有主类可以更改private _实例变量。请注意,没有setter。马特:谢谢你启发我。