actionscript 3 init()

9

我经常看到AS3类的构造函数中有一个init()函数,有时甚至是构造函数中唯一的代码。如果可以使用构造函数自身来初始化一个类,为什么这样做会有用呢?

package 
{

    import flash.display.Sprite;

    public class Example extends Sprite
    {

        public function Example()
        {
            init();                 
        }

        public function init ( ):void
        {

         //initialize here

        }

    }

}
4个回答

16

1
确实,如果您有任何重要的代码,请将其放入一个函数中,并由构造函数调用。 - Allan

6

我这样做的原因是为了在不创建新实例的情况下重新初始化一个类。如果你正确编写init()方法,它就像一个“重置”按钮,可以使类返回到初始状态,同时允许保留已设置的任何变量。

当然,这取决于你如何编写代码。


3

另一个原因可能是您需要引用舞台或父容器,但懒得设置ADDED_TO_STAGE监听器。那么您需要先实例化该类,将其添加到容器中,然后在显示列表上调用init()


2

初学AS3的程序员通常会遇到引用舞台的问题(众所周知的“它不存在”的情况)。

通过以下方式解决...:

public function ClassName()
{
    super();
    addEventListener( Event.ADDED_TO_STAGE, init, false, 0, true );
}

private function init( event : Event ) : void
{
    removeEventListener( Event.ADDED_TO_STAGE, init );
    // Reference stage.stageWidth;
    // Call init after some sort of load completion initialized in the constructor
}

...这很容易修复。

有时候你会在构造函数中初始化XML加载器,然后在加载完成后调用initialize函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接