Свойства не определены при их определении (ошибка 1120) - PullRequest
0 голосов
/ 22 января 2010

У меня действительно странная неопределенная ошибка, возникающая здесь в моем ActionScript (код здесь упрощен):

package {
    public class Main extends Sprite {
        private function Test() {
            var testVar:Number = 10;
        }
    }
}

Возвращает ошибку: 1120: Access of undefined property testVar в строке 4.

Если я правильно читаю, то жалуется, что переменная, которую я пытаюсь определить, еще не определена. Отсюда мое замешательство.

Все это работало, когда функции Test предшествовало объявление гигантского объекта, но теперь, когда я переместил это в отдельный класс, я получаю эту ошибку для каждого объявления переменной в каждом методе класса.


Обновление:

Оказывается, добавленные определения классов в конце были причиной проблемы, но я не знаю почему.

Добавление

class A {}
class B {}

до конца .as-файла вызывал все ошибки, но включение только class A {} или class B {} устраняет все ошибки.

Еще более запутанно, еще лучшее решение было следующее:

class C {}
class A extends C {}
class B extends C {}

Что здесь происходит?

1 Ответ

1 голос
/ 22 января 2010

Итак, я полагаю, вы используете CS4 для этого, правильно? В компиляторе для CS4 есть ошибка, которая не позволяет вам сделать это ... при условии, что вы объявляете что-либо как локальную переменную. Вы можете сделать testVar переменной экземпляра класса, и это будет работать.

Если вы хотите добавить один класс вне вашего пакета, вы можете сделать это и по-прежнему использовать локальные переменные. Тем не менее, добавление секунды приведет к тому, что компилятор захлебнется.

Кстати, это работает в CS3, но обычно считается плохой идеей при использовании его для вспомогательных классов (классов, которые будет использовать основной класс в пакете.) Единственный раз, когда я его использую, это объявление класса для использования в качестве аргумента для конструктора-одиночки, например:

package {

    public class MySingletonClass extends Object {

        private static var _instance:MySingletonClass ;

        public function MySingletonClass ($singletonEnforcer:SingletonEnforcer) {}


        public static function getInstance(): MySingletonClass{
            if (MySingletonClass._instance == null) {
                MySingletonClass._instance = new MySingletonClass(new SingletonEnforcer());
            }
            return MySingletonClass._instance;
        }


        public static function get instance(): MySingletonClass{
            return MySingletonClass.getInstance();
        }
    }
}

class SingletonEnforcer extends Object {
    public function SingletonEnforcer() {}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...