如何确定某个类是否已被实例化

时间:2010-11-25 17:38:00

标签: flash actionscript-3

我通常使用if(object!= null)但它不能正常工作。

如何验证类是否已实例化。我想摆脱'无法访问空对象或引用的属性'。

谢谢!

我的意思是'var object:Object;'只是对Object类实例的引用。当我用'object = new Object()'初始化它时,它在构造函数中运行代码,初始化它。如何检查是否已初始化。

3 个答案:

答案 0 :(得分:2)

如果你真的需要知道该类是否已经初始化,那么我建议你在类中使用一个getter,它在你完成初始化后返回一个true值。当然,这仅在您创建了类的实例时才有效。如果我不确定实例是否存在,我首先检查实例是否已创建。我从来没有遇到任何问题。

if(myObject && myObject.isInitialized)
{
    // success
}

答案 1 :(得分:0)

而不是if(myobj!=null),您可以if(myobj)

检查实例或属性是否为null与检查它是否存在不同。

if(myobj)
如果myobjnullundefined,则{p>将失败,而if(myobj!=null)未命中undefined(如果从未分配过实例引用,那么

注意:如果值设置为if(myobj)false,则0也将为false。因为你正在检查担心空指针异常(因此使用复杂的对象),你可以排除false0成为可行值(给你一个假阴性)并使用更一般的用于检查实例是否存在的语句。

答案 2 :(得分:0)

你可能有一个常见的情况,你开始在构造函数中加载一些资产,让我们假设一个背景图像。 此代码无法正常运行:

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; 
}

我希望这会有所帮助。