只是想知道我是否可以从应用程序的任何位置引用入口点对象?是否可以将其分配给某个全局对象,例如stage??
目前我使用静态方法和变量,但这打破了封装。
答案 0 :(得分:2)
如果someObject
在显示列表中,那么您有一个someObject.root
引用,这就是您要查找的内容。如果从显示列表中删除someObject
,则会丢失该引用。
我的答案是否定的,没有直接的方式来访问入口对象,并且不应该:这就是封装的内容。全局访问几乎是AS1方式。当您通过隐式引用MainClass来访问主实例时,会使应用程序的某些部分紧密耦合,这通常很糟糕。
但是,如果你确实需要它,你可以选择几个选项。
MainClass.instance
MainClass.getInstance()
我会选择后者。
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所说。