AS3 - 在其他函数内定义函数

时间:2012-02-16 23:31:58

标签: actionscript-3

当添加事件监听器并定义它​​们的相应函数时,我发现自己在构造函数的代码中定义了很多函数。像这样:

package
    {
        public class stuff extends Sprite
        {
            public function stuff()
            {
                minimizeBtn.addEventListener(MouseEvent.CLICK, minimizeOnClick);
                function minimizeOnClick(e:MouseEvent):void
                {
                       //do minimization stuff here
                }
            }
        }
    }

但是,显然还有另一种选择来定义它,就像类的任何其他方法一样。像这样:

 package
    {
        public class stuff extends Sprite
        {
            public function stuff()
            {
                minimizeBtn.addEventListener(MouseEvent.CLICK, minimizeOnClick);
            }

            internal function minimizeOnClick(e:MouseEvent):void
            {
                //do minimization stuff here
            }
        }
    }

第二个选项可能没有意义,因为该函数实际上并不是该类的方法。但我担心的是第一种方法会为每个类的实例耗尽额外的内存。哪种方法是最有效和最正确的方法,第一种方法是否为每个类实例占用额外的内存或CPU时间?

谢谢!

1 个答案:

答案 0 :(得分:1)

后一个例子是正确的方法,你应该尝试在相关的类中封装你的addEventListener()和监听功能。在您的情况下,您可能需要考虑为minimizeBtn创建一个课程:

public class MinimizeButton extends SimpleButton
{

    public function MinimizeButton()
    {
        addEventListener(MouseEvent.CLICK, _onClick);
    }

    private function _onClick(e:MouseEvent):void
    {
        // do minimization stuff here
    }

}

MinimizeButton的{​​{1}}应该定位您的班级_onClick()的相关实例,并从那里运行stuff需要做的任何事情。

这个例子的过程更像是:

stuff“我已被点击,我应该通知MinimizeButton:,以便它可以做一些相关的事情。”

而不是:

stuff“我会坐下来等stuff:点击,然后我会做所需的。”