单例中的AS3 Access阶段对象返回null

时间:2013-06-30 23:23:25

标签: actionscript-3 null singleton

我知道单身人士是敏感话题,但我真的不想听到任何关于这一点,或者你对这个实现的看法。这个问题与此无关。

所以,我已经使用带有实例的静态var实现了一个单例。

private static var instance:SomeClass = new SomeClass();

public static function getInstance():SomeClass {
    return instance;
}

SomeClass是库中的一个类,在那个库中有一些名为someSymbol的实例。

出于某种原因,当我使用SomeClass作为单身人士时,每次我想访问someSymbol时,我都会Cannot access a property or method of a null object reference。但是如果我通过常规实例化实现SomeClass,则错误消失。

我尝试过以不同方式访问someSymbol,但我总是收到错误。

someSymbol.rotation = 0;

以及

var aSymbol = getChildByName("someSymbol");
aSymbol.rotation = 0;

以及

trace(someSymbol); // null
trace(this['someSymbol']); // null
trace(SomeClass.instance.someSymbol); // throws error

那么为什么我在使用这个单例实现时会得到null,而不是像往常一样实例化这个类?

编辑:

感谢@Marty Wallace的回答,我改变了我的单例实现,现在它可以正常工作。

所以,不要以这种方式实例化实例:

private static var instance:SomeClass = new SomeClass();

我在第一次调用getInstance()时实例化它,就像@Marty那样。

我不确切知道窗帘后面发生了什么,但在文档类运行之前实例化时似乎没有完全导出SomeClass

1 个答案:

答案 0 :(得分:1)

你的例子对我来说很好:

public class Singleton
{

    private static var _instance:TestClip;


    public static function get instance():TestClip
    {
        if(_instance === null) _instance = new TestClip();
        return _instance;
    }

}

TestClip有一个内部MovieClip,实例名称为inner

trace(Singleton.instance.inner); // [object MovieClip]

如果你为SomeClass上课并为这样的someSymbol做一个吸气器,你有运气吗?

public function get someSymbol():MovieClip
{
    return this["someSymbol"];
}