这是一个很多地方已经涵盖的主题,但还有一个问题。
当您使用反射(describeType)列出类的构造函数参数时,您可能知道,Flash Player中存在一个错误< 10.1导致构造函数参数在某些情况下是无类型的(type =“*”)。对此的广泛解决方案是使用正确数量的null作为参数传递来预先实例化有问题的类,然后再次在类上调用describeType。
现在问题出现了:预实例化的理想结果是错误,最好是在课程有时间进行任何管道之前。像这样:
public function SomeClass(model:Model) {
_model = model; // OK
_model.addEventListener(Event.CHANGE, _onChange); // Throws error, great!
}
在这种情况下,我们留下了一个无法运行的SomeClass实例,它可以为null,每个人都很开心。但是如果构造函数有时间将自己绑定到类之外的任何东西会发生什么:
public function SomeClass(model:Model) {
_someOtherClass = new SomeOtherClass();
_someOtherClass.addEventListener(Event.CHANGE, _onOtherChange); // Uh-oh..
_model = model;
_model.addEventListener(Event.CHANGE, _onChange); // Throws error too late!
}
然后会发生一个可能导致意外行为和/或内存泄漏的迷路实例。
您可以通过重新排列构造函数中的行来解决此问题,以确保它会抛出错误并及时中止。但这不是框架的可持续选择。
有什么想法吗?