我想制作一组循环按钮,并向它们添加一些事件,但匿名功能是相同的。我编写示例代码:
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));
关于actionscript-3 - 在循环中创建具有不同参数的匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4530417/