我想循环设置按钮,并向其中添加一些事件,但是匿名函数是相同的。我写示例代码:

for(var i:int=0;i<5;i++)
{
    var button:SimpleButton = new SimpleButton(...);
    ...
    button.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void
    {
        trace(i);
    });
}

...


我想从单击按钮而不是4,4,4,4 ..跟踪0,1,2,3 ..
你知道我怎么做吗?

最佳答案

您遇到的问题是ActionScript不支持闭包。

换句话说,变量i不会被复制到每个函数自己的上下文中。所有函数都引用i的相同实例。

此处有更多信息:
http://flex.sys-con.com/node/309329

为此,您需要一个生成函数的函数:

public function makeFunction(i:int):Function {
    return function(event:MouseEvent):void { trace(i); }
}


现在,您可以使用各自的上下文创建函数的新实例:

button.addEventListener(MouseEvent.CLICK, makeFunction(i));

07-25 23:03
查看更多