我通常使用if(object!= null),但它不能正常工作。如何找出一个类是否已实例化
如何验证类是否实例化。我想摆脱'不能访问空对象或引用的属性'。
谢谢!
我的意思是'var object:Object'只是对Object类实例的引用。当我用'object = new Object()'初始化它时,它在构造函数中运行代码,初始化它。我如何检查它是否已被初始化。
我通常使用if(object!= null),但它不能正常工作。如何找出一个类是否已实例化
如何验证类是否实例化。我想摆脱'不能访问空对象或引用的属性'。
谢谢!
我的意思是'var object:Object'只是对Object类实例的引用。当我用'object = new Object()'初始化它时,它在构造函数中运行代码,初始化它。我如何检查它是否已被初始化。
如果您确实需要知道该类是否已经初始化,那么我会建议您在类内部使用一个getter,当您完成初始化时返回true值。当然,这只有在您创建了该类的实例时才有效。如果我不确定实例是否存在,我首先检查是否创建实例。我从来没有遇到任何问题。
if(myObject && myObject.isInitialized)
{
// success
}
,而不是if(myobj!=null)
,你可以做if(myobj)
。
检查以查看实例或属性是否为null
与检查它是否存在不同。如果myobj
是null
或undefined
而if(myobj!=null)
失误undefined
(这是实例引用的将是什么,如果它从来没有被分配一个值)
if(myobj)
将失败。
注意:如果该值设置为false
或0
,则if(myobj)
也将为false。由于您正在检查是否担心空指针异常(因此使用复杂对象),因此可以排除false
和0
之间的可存活值(给出错误否定结果),并使用更一般的if语句来检查实例是否存在存在。
您可能有一种常见的情况,即开始在构造函数中加载一些资源,让我们假设一个背景图像。 此代码将无法正常工作:
var object:TestObject = new TestObject(); //inside the contructor, the background image will start loading
object.background.width = 120; // this will not work, because the background is not loaded yet
有很多的方法来解决这个...
你可以创建对象之前装入的资产,他们完全加载后,将其发送到构造函数作为参数。
或者你可以定义,当他们完成加载,这样的事情将被分配到加载的资产对象内部的一些属性:
//outside
object.BackgroundWidth = 120;
----------
//inside the class
public var BackgroundWidth:int;
private var background:Bitmap;
public function TestObject(){
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, assignProperties);
loader.load("img.png");
}
//this will make sure the width is applied to the background
//when it's loaded completely
private function assignProperties(e:Event){
background = Bitmap((event.currentTarget as LoaderInfo).content);
background.width = BackgroundWidth;
}
我希望这有助于。
你能举一个例子,说明'if(object!= null)`失败吗?很难看出你是否能够判断它是否具有非空引用。或者你的意思是初始化 - 就像所有的属性已经设置好了? – 2010-11-25 17:43:17
是的,已初始化。 – Loop 2010-11-25 18:31:38