我經常看到只調用init()函數的構造函數。爲什麼只有在構造函數中放入init()函數的內容時纔有init()函數?初始化函數的用途
Q
初始化函數的用途
2
A
回答
3
對象的構造函數每個實例僅調用一次,而「init」函數可能會多次調用。考慮下面的代碼:
public class Foo
{
private var initialized:Boolean = false;
public function Foo(id:String = null)
{
_id = id;
if (id)
init();
}
private var _id:String = null;
public function get id():String
{
return _id;
}
public function set id(value:String):void
{
if (_id != value) {
_id = value;
init();
}
}
private function init():void
{
if (initialized)
return;
if (!id)
return;
initialized = true;
// do initialization here
}
}
基本上所有由所述對象的初始化過程可能無法使用在構造在運行時所需的信息,並且它可以在以後變得可用(在上面的例子,當設置了id
屬性時)。所以有時候有一個單獨的init()
是有道理的。
3
+1 @mj:調用構造函數時,某些變量可能不可用。
一個相當常見的配置變如下:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();//if stage is available, init()
else addEventListener(Event.ADDED_TO_STAGE, init);//otherwise, wait for the stage to be available
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
//here we can access the stage
//stage.prop = value;
}
}
}
,如果這是主類(或文檔類),舞臺的確會在構造函數中avaible。我們可以立即調用init()。 如果這個類被另一個類實例化,它將無法從構造函數中訪問該階段:它將不得不等待被添加到之前的階段。 init()可以承載另一個名字btw:setup,reset ......不管,它只是一個非正式的「約定」;至少當你在某處看到init函數時,幾乎可以肯定它會在所有必要的數據準備好之後初始化對象:)
+0
這是其中的一個「爲什麼我沒有想到這個?」時刻。 – mpdonadio 2011-02-01 15:20:10
相關問題
- 1. 在構造函數中初始化集合有什麼用途
- 2. 初始化函數
- 3. 調用函數初始化
- 4. 的JavaScript函數初始化
- 5. 參數初始化列表中第二級類的構造函數的用途
- 6. 初始化字典的最短途徑
- 7. 初始化實現函數
- 8. 初始化函數指針
- 9. Python類初始化函數
- 10. 導入初始化函數
- 11. jquery初始化函數
- 12. 陣列初始化函數
- 13. 寫作初始化函數
- 14. 初始化回調函數
- 15. 使用下面的函數初始化
- 16. 用數組或初始化初始化一個NSMutableArray初始化
- 17. 初始化的聲明VS在構造函數初始化
- 18. 帶空初始化的構造函數初始化列表
- 19. 使用rand()函數初始化數組
- 20. 初始化函數的優化
- 21. (函數(){})()聲明/初始化JavaScript函數
- 22. 使用init_seg調用初始化函數
- 23. 在Objective-C初始化數組結束時「nil」的用途
- 24. 初始化塊vs構造函數vs變量初始化
- 25. 燼-CLI:初始化函數和初始化器和子類
- 26. 函數初始化和對象初始化(多處理)
- 27. 構造函數初始化vs獲取集合初始化
- 28. 初始化在定義與初始化在構造函數中
- 29. 在函數中初始化,並沒有在主要初始化
- 30. 調用構造函數並初始化
[actionscript 3 init()](http:// stackoverflow。 com/questions/1650714/actionscript-3-init) – taskinoor 2011-02-01 14:32:48