我想在循环中设置按钮,并向它们添加一些事件,但匿名函数是相同的。我写了示例代码:
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 .. 你知道我怎么能做到这一点?
答案 0 :(得分:19)
您遇到的问题是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));