1

我知道单例是敏感的主题,但我真的不想听到任何关于它的信息,或者你对这个实现的看法。这个问题与此无关。

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

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在文档类运行之前实例化时似乎没有完全导出。

4

1 回答 1

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"];
}
于 2013-06-30T23:40:48.193 回答