2010-01-12 45 views
2

我有一些简单的代码:的Flash AS2(CS4) - 的setInterval导致for循环到不行

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

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

任何想法?

回答

3

你说情理之中的事情。当你调用该函数通常情况下,“本”是你的对象时。您使用的setInterval运行它,你失去了参考你的“本”。

- 编辑根据意见,以帮助他人 -

这里有3种方法来解决这个问题:

这种方式涉及到传递 “这个” 给你的函数:

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

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

这种方式涉及到传递 “这个” 给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; 
    } 
} 
+0

记得接受这个答案,如果你发现它有用。 – 2010-01-12 04:06:55

+0

当按照你的例子设置的函数调用函数时,我传递“this”就像测试(this)一样;它是未定义的。你确实提醒我AS2支持eval,所以我简单地将这个[“btn”+ a]改为eval(“btn”+ a),它就可以工作。非常感谢提醒:) – 4imble 2010-01-12 04:44:45

+0

我很高兴你找到了解决方案。如果您认为这有帮助,请接受此答案。 – 2010-01-12 04:48:22