在AS3中,您可以通过调用成员函数来初始化成员变量(或常量)。这在调用构造函数之前发生。与此同时,即使尚未发布构造函数,也可以在初始化成员函数中完全访问'this'关键字。
这听起来像是一颗定时炸弹。任何人都可以评论上述做法吗?
编辑:
...
private var member:Sprite = getSprite(); // called before constructor
...
private function getSprite():Sprite {
var spr:Sprite = new Sprite();
this.addChild(spr); // 'this' used before constructor
return spr;
}
答案 0 :(得分:3)
据我所知,这很好(如果不是很好和可读)。调用new时会发生什么:
this
可用)new
返回this
危险在于你必须确保getSprite()
中的任何内容都不需要在构造函数中初始化的内容(包括父构造函数,如果它被调用)。我会避免它,只是初始化构造函数中的所有内容。
答案 1 :(得分:0)
你真的不能做你所说的。如果尚未构造实例,则无法访问实例上的非静态方法。至于Jonatan关于构造函数调用super的注释,如果你没有在构造函数体中调用super(),它会自动发生在方法的顶部。当您使用面向对象语言构造对象时,您将为该类的所有成员分配内存。
如果你要说:
var myVar:MyObject;
myVar.doSomething(); //this line creates a null pointer exception because myVar is null
如果你要说:
var myVar:MyObject = MyObject.createInstance(); // assuming createInstance is a static method that returns an instance of MyObject
myVar.doSomething(); //assuming createInstance() didn't return null then this works
但是在第二种情况下,你不能在静态方法createInstance()中引用“this”关键字。
如果你展示了一个反驳我所说的内容的完整例子,那么我将运行它并删除我的帖子,但我很确定我就在这里。