Объект является пустой ссылкой только при использовании метода? - PullRequest
0 голосов
/ 07 февраля 2011

У меня есть объект с именем «target» со свойством «motion»:

private function start() {
var movement:IMovement = new ZigZagMovement(target);
target.movement = movement;
mediumDifficulty();
}

private function mediumDifficulty(target:AbstractTarget):void {

            var movement:IMovement = target.movement;
            movement.mediumMove();
        }

Мой класс Abstract Target выглядит следующим образом:

package 
{
    import flash.display.Sprite;

    public class AbstractTarget extends Sprite
    {
        protected var __movement:IMovement;

        public function AbstractTarget()
        {
        }

        public function set movement(value:IMovement):void
        {
            __movement = value;
        }

        public function get movement():IMovement
        {
            return __movement;
        }


    }
}

Мой класс «движения»выглядит следующим образом:

package {
    import flash.events.Event;

    public class ZigZagMovement implements IMovement
        {
            private var __target:Object;

            public function ZigZagMovement(target:Object)
            {
                __target = target;
            }



            public function mediumMove():void
            {
                // movement code
            }


        }
    }

Странная вещь, когда я отслеживаю "target" и "target.movement", я получаю то, что ищу ... но если я пытаюсь сказать, напишите:

target.movement.mediumMove();

ИЛИ

movement.mediumMove();

Тогда и цель, и "движение" (локальная переменная) обнуляются ??

1 Ответ

1 голос
/ 07 февраля 2011

Я думаю, что нам нужно больше информации.Есть некоторые вещи, которые я не вижу в примере кода или объяснении:

  • Какой конкретный объект вы передаете в функцию mediumDifficulty?Это явно не ZigZagMovement, так как это переменная члена движения AbstractTarget.
  • Когда вы создаете конкретный подкласс AbstractTarget?Каков конкретный подкласс класса AbstractTarget?Вы не опубликовали код для этого.Вы уверены, что он на самом деле создал объект движения к тому времени, когда он был передан функции mediumDifficulty?

Похоже, происходит то, что подкласс AbstractTarget, который вы тестируете изолированно, имеет IMovement, но нетот, который вы передаете функции mediumDifficulty, но без дополнительной информации трудно сказать.

(Настройка вики сообщества на случай, если я что-то упустил)

РЕДАКТИРОВАТЬ: Сновая информация -

Похоже, что у вас есть переменная уровня класса с именем "target", которой вы назначаете свое движение, и что у вас также есть параметр с именем "target" в вашем mediumDifficulty ()подпись функции, и что вы на самом деле не передаете целевой объект уровня класса в функцию.Это приводит к тому, что когда mediumDifficulty пытается определить значение цели, он становится пустым, потому что он смотрит на параметр, а не на переменную уровня класса.Возможно, именно так вам удастся отследить target и target.movement в функции start (), но не получить никаких значений в mediumDifficulty.

Постарайтесь в будущем иметь параметры функции или переменные области действия не обмениваться именами с переменными класса, чтобы сократить эту путаницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...