gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:59:52 24 4
gpt4 key购买 nike

我有一些简单的代码:

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

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

我真的希望这是有道理的,抱歉,现在是凌晨 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;
}
}

关于Flash AS2 (CS4) - setInterval 导致 for 循环不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2046497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com