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