在我的文档类中,我已将一些放置在舞台上的对象分配给一个数组,以便稍后调用它们。
当我在构造函数外部声明数组时,对象尚未创建,并且赋值为 null,这与我在构造函数内部声明它们时不同。 为什么会发生这种情况?
如何避免这种情况?可以我可以使用监听器来跟踪对象何时加载吗?
第一个案例
package {
public class Document extends MovieClip {
var obj:Array = [object1,object2];
public function Document() {
trace(obj[0]); // <-- null
}
}
}
第二种情况
package {
public class Document extends MovieClip {
public function Document() {
var obj:Array = [object1,object2];
trace(obj[0]); // <-- reference value
}
}
}
最佳答案
全局变量(即任何方法之外的变量)在任何事情之前加载,在调用构造函数之后以及在执行之前.
请改用此代码:
package {
public class Document extends MovieClip {
var obj:Array;
public function Document() {
obj = [object1,object2];
trace(obj[0]);
}
}
}
附录:
Stage 对象在构造函数代码的顶部初始化,例如 .net 中的设计器对象。
因此,由于全局变量在构造函数代码执行之前被初始化,object1
和object2
仍然是null
.
附录 2:
您有以下序列:
- 调用类的构造函数
- 全局变量已初始化(您的
obj
数组,以及object1
/object2
变量,但不是它们的值) - 设计器(舞台上的图形)对象已初始化(即调用
object1 = new Object1()
) - 执行构造函数代码
除非您在高级 AS 设置中取消选中“自动声明舞台实例”,否则舞台对象始终会自动声明和初始化。
关于actionscript-3 - 舞台上的对象不会在构造函数之外初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13762206/