Actionscript 3 嵌套函数中的EventListeners

Actionscript 3 嵌套函数中的EventListeners,actionscript-3,function,addeventlistener,nested-function,Actionscript 3,Function,Addeventlistener,Nested Function,在一个包含嵌套函数的函数之外,我有几个MouseEvent侦听器,这些函数需要使用附加到侦听器的函数 button1.addEventListener(MouseEvent.ROLL_OVER, buttonOver); function navigation (): void { if statements; function buttonOver(event:MouseEvent):void { movieclip.play(); } } 我

在一个包含嵌套函数的函数之外,我有几个MouseEvent侦听器,这些函数需要使用附加到侦听器的函数

button1.addEventListener(MouseEvent.ROLL_OVER, buttonOver); 

function navigation (): void {

    if statements;

    function buttonOver(event:MouseEvent):void {
        movieclip.play();
    }
}

我一直收到一个“1120:Access of undefined property buttonOver”错误。我知道这是因为EventListener在函数“navigation”之外,但我需要其他函数稍后访问它。我是不是完全错了?

那不行。我认为你不应该嵌套函数。为什么不使用一个可以从其他类/实例访问的类呢


Rob

我不确定为什么首先需要嵌套函数。没有嵌套,一切都会容易得多

button1.addEventListener(MouseEvent.ROLL_OVER, buttonOver); 

function navigation (): void {

    if statements;
}
function buttonOver(event:MouseEvent):void {
    movieclip.play();
}

忘记嵌套和匿名函数吧。同时也忘了在框架中编写代码。不使用它们,您可以做任何您想做的事情。

我不确定,但您是否希望根据某些条件添加并删除事件侦听器

当我看到初学者试图嵌套事件处理程序时,这可能是他们最常见的错误

function navigation (): void {
    if (somethingTrue){
        button1.addEventListener(MouseEvent.ROLL_OVER, buttonOver); 
    else if(somethingElseTrue){
        button1.removeEventListener(MouseEvent.ROLL_OVER, buttonOver);
    }  
}

function buttonOver(event:MouseEvent):void {
    movieclip.play();
}

正如其他答案所提到的,嵌套函数仅限于它在中定义的函数的范围。您尝试在该函数之外访问它将抛出一个错误。相关Adobe文档如下:


将嵌套函数移到它所嵌套的函数之外,或者将侦听器更改为调用
导航
,并要求
导航
调用
按钮

这是一个单独的.as文件;.fla中实际上没有代码。这是我第一次回到1.0版本,所以我的速度很慢。你能在一个类中完成多个公共函数吗?我开始意识到我在这方面远远落后了,这太荒谬了。我错过了好几天的C++和HTML,不用担心。你可以用ActionScript中的类做一些很酷的事情,你的头脑也不难理解。看看这个教程,它应该会给你一个想法:我已经回到过去,在没有嵌入函数的情况下重写了我的as。这变得容易多了,真是不可思议。谢谢你的帮助