as3 Доступ к неопределенному свойству? - PullRequest
0 голосов
/ 26 февраля 2009

Может ли кто-нибудь помочь мне выяснить, почему я получаю сообщение об ошибке «Доступ к неопределенному свойству: removeChild (goBack)» в следующем фрагменте?

Кстати, это для вспышки CS4

function nameOfFunction() {

var goBack:backButton_mc = new backButton_mc();

goBack.x = 10;

goBack.y = 700;

goBack.back_text.text = myXML.*[buildingName].NAME;

goBack.name = "backBtn";

goBack.buttonMode = true;


addChild(goBack);

goBack.addEventListener(MouseEvent.CLICK, anotherFunction);

}


function anotherFunction(e:MouseEvent):void {

 removeChild(goBack);

}

Ответы [ 2 ]

1 голос
/ 04 марта 2009

Бегемотик прав, но я чувствую, что важно объяснить немного больше.

Вы создали локальную переменную, то есть var someVariable: DataType; в функции. Это означает, что эта переменная будет доступна только для объектов в области видимости (внутри) функции (локально для) и будет действовать только в течение всего времени существования функции. Как только эта функция запустилась, код исчез, пока снова не запустился. Похоже, что вы, вероятно, программируете прямо во Flash IDE на временной шкале, что нормально, но, если вы использовали класс документа, вы могли бы просто объявить вашу переменную в области видимости класса чуть выше функции конструктора, а затем установите значение в той же функции, которую вы используете сейчас. Таким образом, ссылка на переменную не существует внутри функции, она просто устанавливается изнутри. Это позволит получить доступ к этой переменной из любого места в том же классе, даже если для нее установлено значение private.

Это может помочь:

//Frame 1, Actions layer
//Slap goBack right onto the root / stage
var goBack:MovieClip;
/*
I noticed you had this data-typed differently,
i prefer to type to an interface, not an implementation.
Since your class is a movieclip in the library it extends
MovieClip and therefor IS A MovieClip, but ok either way.
*/

function nameOfFunction():void
{
    goBack = new backButton_mc();
    goBack.x = 10;
    goBack.y = 700;
    goBack.back_text.text = myXML.*[buildingName].NAME;
    goBack.name = "backBtn";
    goBack.buttonMode = true;
    addChild(goBack);
    goBack.addEventListener(MouseEvent.CLICK, anotherFunction);
}

function anotherFunction(e:MouseEvent):void
{
    removeChild(goBack);
}

Область применения очень важна, и через некоторое время ее очень легко решить. Придерживайтесь этого, экспериментируйте, читайте о соглашениях и стандартах, которые могут помочь вашей разработке, и полюбите DocumentClass, потому что, хотя он может поначалу пугать некоторых, как только вы изучите его и привыкнете, к нему так трудно идти Вернемся к программированию во Flash IDE на временной шкале, где, как мне кажется, есть только отображаемые объекты и аудио.

1 голос
/ 26 февраля 2009

Вы ошиблись с областью. (сюрприз :-D)

Переменная goBack только что определена внутри «nameOfFunction», при попытке доступа к ней из другой функции, например «anotherFunction», она больше не будет существовать (даже если она находится в списке отображения)

Существуют различные возможности решения этой проблемы:

function anotherFunction(e:MouseEvent):void {
   removeChild(e.currentTarget);
}

Или лучшим способом было бы: продвигать goBack как члена класса, содержащего обе функции. (Или, если вы не используете классы, сделайте goBack «глобальным».)

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