Flash AS2(CS4) - setInterval导致循环不起作用

时间:2010-01-12 03:21:56

标签: flash actionscript

我有一些简单的代码:

    function testing(){
       for (a=1; a<=4; a++) {
           this["btn"+a].enabled = true;
       }
    }

如果我从任何地方运行此功能,它工作正常。如果我从myTimer = setInteval运行此函数(testing,3000);不起作用。如果我在函数中添加其他随机代码(仅新添加的代码)将起作用。所以我已经把它缩小到this["btn"+a].enabled = true;特别是导致它不能运行的东西。

我真的希望这是有道理的,appologies,凌晨3点:(。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

你说的是有道理的。当您正常调用该函数时,“this”就是您的对象。当您使用setInterval运行它时,您将失去对“this”的引用。

- 根据评论进行编辑以帮助他人 -

以下是解决此问题的3种方法:

这种方式包括将“this”传递给你的函数:

var that = this;
setInterval(function() {testing(that)}, 1000);

function testing(obj) {
    for (a = 1; a <= 4; a++) {
        obj["btn" + a].enabled = true;
    }
}

这种方式涉及将“this”传递给setInterval:

setInterval(this, "testing", 1000);

function testing() {
    for (a = 1; a <= 4; a++) {
        this["btn" + a].enabled = true;
    }
}

第三种方式涉及Delagate类:

import mx.utils.Delegate;

setInterval(Delegate.create(this, testing), 1000);

function testing() {
    for (a = 1; a <= 4; a++) {
        this["btn" + a].enabled = true;
    }
}