0
当添加事件侦听器,并确定其相应的功能,我发现自己定义在构造函数中大量的代码的功能。像这样:AS3 - 其他函数中定义函数
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时间?
谢谢!
理想情况下,你会希望有构造尽可能简单(如果你需要做很多事情调用一个init()定义的私有方法)并具有监听器(minimizeOnClick)作为私有函数是最简单的解决方案在我看来 – 2012-02-16 23:47:49
谢谢乔治。我见过其他人说保持构造简单。除了代码可读性之外,还有其他原因吗?使用init函数只会增加更多的开销(只有几个CPU周期,所以它几乎没有,但仍然)。 AS中的构造函数是否与C或Java构造函数完全不同? – 2012-02-16 23:53:32
根据[JOA埃伯特](http://blog.joa-ebert.com/)的ActionScript 3个的优化技术(http://je2050.joa-ebert.com/files/misc/as3opt.pdf)“构造函数中的代码没有被即时编译器(JIT)优化,要使用JIT优化代码,可以从构造函数中调用函数,然后再次优化函数中的代码。“简而言之,Actionscript虚拟机(AVM)的工作方式与C/Java不同。 – 2012-02-16 23:58:59