as3访问未定义的属性?

时间:2009-02-26 15:10:07

标签: actionscript-3 flash-cs4

有人可以帮我找出为什么我收到错误消息“访问未定义的属性:removeChild(goBack)”下面的剪辑?

BTW,这适用于Flash 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 个答案:

答案 0 :(得分:1)

你的范围错了。 (惊喜:-D)

变量goBack刚刚在“nameOfFunction”中定义,当你尝试从另一个函数(如“anotherFunction”)访问它时,它将不再存在(即使它在显示列表中)

解决这个问题有不同的可能性:

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

或者最好的方法是:将goBack提升为拥有这两个函数的类的类成员。 (或者,如果你不使用类,请goBack“global”。)

答案 1 :(得分:1)

河马是正确的,但我觉得解释一点是很重要的。

您创建了一个局部变量,即var someVariable:DataType;在一个函数内。这意味着该变量仅可用于函数范围(内部)中的对象(local to),并且只能持续函数的生命周期。很快,当该功能运行时,代码就会消失,直到再次运行。看起来你很可能在时间线上直接在flash IDE中编程,这很好,但是,如果你使用的是文档类,你只能在构造函数上方的Class范围中声明变量,然后将值设置为您现在使用的相同功能。这样,函数内不存在对变量的引用,它只是从内部设置。这将允许从同一类中的任何位置访问该变量,即使设置为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中的编程,我相信只有显示对象和音频才有。

相关问题