Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 如何确定类是否已实例化_Flash_Actionscript 3 - Fatal编程技术网

Flash 如何确定类是否已实例化

Flash 如何确定类是否已实例化,flash,actionscript-3,Flash,Actionscript 3,我通常使用if(object!=null),但效果不好 如何验证类是否已实例化。我想摆脱“无法访问空对象或引用的属性” 谢谢 我是说,变量对象:对象;'只是对对象类实例的引用。当我用'object=newobject()'初始化它时,它运行构造函数中的代码,并初始化它。如何检查它是否已初始化。如果您确实需要知道类是否已初始化,那么我建议您在类中使用getter,在完成初始化后返回真值。当然,这只有在创建了类的实例时才有效。如果我不确定实例是否存在,我首先检查实例是否已创建。我从来没有遇到过任何问

我通常使用if(object!=null),但效果不好

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

谢谢


我是说,变量对象:对象;'只是对对象类实例的引用。当我用'object=newobject()'初始化它时,它运行构造函数中的代码,并初始化它。如何检查它是否已初始化。

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

if(myObject && myObject.isInitialized)
{
    // success
}
您只需执行
if(myobj)
,而不必执行
if(myobj!=null)

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

if(myobj)
如果
myobj
null
undefined
,则将失败,而
if(myobj!=null)
未命中
undefined
(如果从未为实例引用赋值,则实例引用就是这样)


注意:如果值设置为
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; 
}

我希望这能有所帮助。

您能给出一个例子,说明如果(object!=null)失败,
?很难看出您还能如何判断它是否具有非空引用。或者你的意思是初始化-就像所有属性都已设置一样?你能发布初始化的组成吗?初始化的意思取决于对象的类型。我假设您指的是一个可视对象?而且,由于您提出了多个条件,为了进行代码优化,您应该始终将CPU密集度最低的检查放在条件中的第一位。我知道这听起来有点吹毛求疵,但当你谈到多个条件句时,我想我应该提一下:)。。。ps,我本来想在你的文章中添加此评论,但提交按钮似乎不起作用:/gthmb:谢谢你的评论。但我不确定我是否理解。我猜你的意思是,默认情况下我不应该使用多个条件,因为它需要更多的CPU来计算。我知道这一点,因此我只在不确定是否设置了变量时才使用它。我将研究Wordpress评论错误。Thanke.gthmb:在这种情况下,您肯定希望首先使用myObject,因为如果不首先选中,以下条件将引发空指针异常。