在循环中创建具有不同参数的匿名函数
我想制作循环按钮集,并向其中添加一些事件,但匿名函数是相同的。我编写示例代码:
for(var i:int=0;i<5;i++)
{
var button:SimpleButton = new SimpleButton(...);
...
button.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void
{
trace(i);
});
}
...
我想通过单击按钮跟踪 0,1,2,3.. 而不是 4,4,4,4.. 你知道我该怎么做吗?
I want to make in loop set of buttons, and add to them some events, but anonymous functions is the same. I write example code:
for(var i:int=0;i<5;i++)
{
var button:SimpleButton = new SimpleButton(...);
...
button.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void
{
trace(i);
});
}
...
And I want to trace 0,1,2,3.. from click buttons instead of 4,4,4,4 ..
Do you know how can I make this ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您遇到的问题是 ActionScript 不支持闭包。
换句话说,变量
i
不会被复制到每个函数自己的上下文中。所有函数都引用i
的同一个实例。更多信息请点击这里:
http://flex.sys-con.com/node/309329
为了做到这一点为此,您需要一个生成函数的函数:
现在,您可以使用自己的上下文创建该函数的新实例:
The problem you are running into is that ActionScript does not support closures.
In other words, the variable
i
does not get copied into it's own context per function. All functions refer to the same instance ofi
.More information here:
http://flex.sys-con.com/node/309329
In order to do this, you need a function that generates a function:
Now, you create new instances of the function with their own context: