1

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

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

4

2 回答 2

2

如果someObject在显示列表中,那么您有一个someObject.root您正在寻找的参考。如果您someObject从显示列表中删除,您将失去该参考。

我的回答是否定的,没有直接访问入口对象的方法,也不应该有:这就是封装的意义所在。在全球范围内访问某些东西几乎是 AS1 方式。当您通过隐式引用 MainClass 访问主实例时,您会使应用程序的某些部分紧密耦合,这通常是不好的。

但是,如果您确实需要它,您可以从多个选项中进行选择。

  • 使用静态变量: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;
    }
}

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

于 2011-07-26T10:09:07.653 回答
1

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

于 2011-07-26T09:01:52.490 回答