Flash AS2 (CS4) - setInterval, приводящий к тому, что цикл не работает - PullRequest
2 голосов
/ 12 января 2010

У меня есть простой код:

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

Если я запускаю эту функцию из любого места, она работает нормально. Если я запускаю эту функцию из myTimer = setInteval (тестирование, 3000); она не будет работать. Если я добавлю другой случайный код в функцию, он (только недавно добавленный код) будет работать. Таким образом, я сузил это до кое-чего о this["btn"+a].enabled = true; определенно, что заставляет это не бежать.

Я действительно надеюсь, что это имеет смысл, извинения, сейчас 3 часа ночи: (.

Есть идеи?

1 Ответ

3 голосов
/ 12 января 2010

То, что вы говорите, имеет смысл. Когда вы вызываете эту функцию как обычно, «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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...