在循环中创建具有不同参数的匿名函数

发布于 2024-10-09 07:29:35 字数 334 浏览 3 评论 0原文

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酒解孤独 2024-10-16 07:29:35

您遇到的问题是 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));

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 of i.

More information here:
http://flex.sys-con.com/node/309329

In order to do this, you need a function that generates a function:

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

Now, you create new instances of the function with their own context:

button.addEventListener(MouseEvent.CLICK, makeFunction(i));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文