在变量声明或构造函数中实例化类

Chr*_*igg 6 actionscript actionscript-3

可能重复:
在AS3中初始化类变量的"正确"位置在哪里

我想知道是否有人知道更好地在它的变量声明或构造函数中实例化类?例如,这个:

protected var _errorHandler:ErrorHandler = new ErrorHandler();
Run Code Online (Sandbox Code Playgroud)

或这个:

protected var _errorHandler:ErrorHandler;

public function someClass() {
_errorHandler = new ErrorHandler();
}
Run Code Online (Sandbox Code Playgroud)

我认为这是一个小问题,但我希望我的代码尽可能强大和高效!

谢谢

克里斯

Ada*_*ith 7

为了便于阅读,最好在构造函数中进行初始化 - 以便能够轻松查看在何时初始化的内容.最不可读的选择是混合这些,我不推荐.

您将看到AS3程序员使用的第三个选项:

  • 变量声明中没有初始化
  • 空(或几乎为空)构造函数
  • 所有初始化都在一个或多个专用的init()函数中完成

这种方法有两个要点:

  1. 您可以通过再次调用init轻松重置对象以供重用
  2. 您可以绕过AS3不会让您像其他类似语言(Java/C++/C#)一样重载构造函数的限制.例如,您可能希望能够使用一个或多个不同类型的对象初始化数据结构.

就性能而言,我相信你的两个例子会编译成相同的字节代码.AS3编译器为构造函数之外的静态声明创建了一个特殊的类初始化程序,但对于在声明时初始化的常规成员变量,我希望它只是将初始化移动到构造函数内部.但它是将它们向前移动还是在构造函数中明确指出之后?我不记得了,这就是为什么我把可读性作为将一切都放在构造函数中的主要原因:-)