我有一些简单的代码:
function testing(){
for (a=1; a<=4; a++) {
this["btn"+a].enabled = true;
}
}
如果我从任何地方运行此功能,它工作正常。如果我从myTimer = setInteval运行此函数(testing,3000);不起作用。如果我在函数中添加其他随机代码(仅新添加的代码)将起作用。所以我已经把它缩小到this["btn"+a].enabled = true;
特别是导致它不能运行的东西。
我真的希望这是有道理的,appologies,凌晨3点:(。
有什么想法吗?
答案 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;
}
}