2013-06-30 1 views
1

Я знаю, что синглтоны - чувствительные темы, но я действительно не хочу ничего об этом слышать или что вы думаете об этой реализации. Этот вопрос не об этом.AS3 Объект этапа доступа в singleton возвращает null

Итак, я реализовал синглтон, используя статический 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 при использовании этой реализации одноплодной, а не тогда, когда инстанцировании класс, как обычно?

Edit:

Благодаря @Marty Уоллес ответа, я изменил свою одноплодную реализацию, и теперь он работает.

Таким образом, вместо того, чтобы инстанцирование экземпляра так:

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

я вместо того, чтобы создать экземпляр его в первый раз getInstance() называется как @Marty это делает.

Я не знаю точно, что происходит за шторами, но кажется, что SomeClass не был полностью экспортирован при создании экземпляра перед запуском класса документа.

+0

Это интересный вопрос - я проверю его сейчас. – Marty

ответ

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"]; 
} 
+0

Я отредактировал свой вопрос, пожалуйста, взгляните. – Pier

+0

Какие IDE вы используете? – Pier

+0

@ Пир Flash. Я все еще не понимаю вашу ошибку. На самом деле я никогда не получаю 'null', просто неопределенный. – Marty

Смежные вопросы