我经常看到只调用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. 的JavaScript函数初始化
- 3. 参数初始化列表中第二级类的构造函数的用途
- 4. jquery初始化函数
- 5. 阵列初始化函数
- 6. Python类初始化函数
- 7. 初始化函数指针
- 8. 初始化回调函数
- 9. 初始化函数的优化
- 10. (函数(){})()声明/初始化JavaScript函数
- 11. 使用init_seg调用初始化函数
- 12. 在Objective-C初始化数组结束时“nil”的用途
- 13. 函数初始化和对象初始化(多处理)
- 14. Odoo - 初始化函数不起作用
- 15. 调用构造函数并初始化
- 16. 使用静态初始化函数
- 17. 用super构造函数初始化()
- 18. 无法在初始化函数1.0.0rc中查看初始化函数
- 19. 用初始化器列表中的空构造函数初始化父类?
- 20. 初始化,初始化与参数和便利初始化
- 21. 初始化数组时初始化System.AccessViolationException
- 22. main()函数中的默认初始化
- 23. 初始化变量的函数C
- 24. jQuery的初始化函数不工作
- 25. 类的构造函数初始化?
- 26. PHP - 初始化变量的函数
- 27. 初始化函数指针的矢量
- 28. coco2D CCLayer的初始化函数
- 29. 如何初始化函数中的MPI?
- 30. 结构的初始化函数
[actionscript 3 init()](http:// stackoverflow。 com/questions/1650714/actionscript-3-init) – taskinoor 2011-02-01 14:32:48