我想循环设置按钮,并向其中添加一些事件,但是匿名函数是相同的。我写示例代码:
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));