有没有办法从应用程序的其他类访问入口点类对象?

时间:2011-07-26 06:43:33

标签: actionscript-3 global entry-point

只是想知道我是否可以从应用程序的任何位置引用入口点对象?是否可以将其分配给某个全局对象,例如stage??

目前我使用静态方法和变量,但这打破了封装。

2 个答案:

答案 0 :(得分:2)

如果someObject在显示列表中,那么您有一个someObject.root引用,这就是您要查找的内容。如果从显示列表中删除someObject,则会丢失该引用。

我的答案是否定的,没有直接的方式来访问入口对象,并且不应该:这就是封装的内容。全局访问几乎是AS1方式。当您通过隐式引用MainClass来访问主实例时,会使应用程序的某些部分紧密耦合,这通常很糟糕。

但是,如果你确实需要它,你可以选择几个选项。

  • 使用static var:MainClass.instance
  • 通过MainClass.getInstance()
  • 使用类似单线程的访问权限
  • 创建包级变量或包级别getter方法

我会选择后者。

package com.smth.application 
{
    public var mainObject:MainClass;
} 

// in main app
package com.smth.application 
{
    public function MainClass()
    {
        mainObject = this;
    }
}

它可能看起来有点类似于静态访问,但我认为这样你的代码将保留一些灵活性。

答案 1 :(得分:1)

stage是对应用程序顶层的引用,您可以通过显示树上的任何显示对象myDisplayObject.stage访问该应用程序。使用自定义文档类时,它将是stage的第一个子项(索引0),除非您手动强制将其他内容添加到0索引中,如Bakapii所说。