Сегодня потерял минут 20, пытаясь понять почему “не едут лыжи”.
Решения так и не нашел. Гугл также по этому поводу молчит.
Итак, код FLA-файла (ActionScript 2.0), в первом кадре:
import foo;
var foo1 = new foo();
Код внешнего файла foo.as:
class foo {
function foo() {
setTimeout(this.bar, 1000);
}
function bar() {
trace(‘foo.bar called’);
}
}
Думаете, это работает? Хрена-с два! Компилятор выдает ошибку:
foo.as, Line 4 / There is no method with the name ‘setTimeout’. / setTimeout(this.bar, 1000);
Почему-то компилятор, вместо того, чтбы найти имя “setTimeout” в списке глобальных функций, упорно считает, что я пытаюсь сделать вызов this.setTimeout().
Что примечательно, если использовать setInterval() вместо setTimeout(), то все прекрасно работает.
Также, если писать plain-код, без использования класса – все также прекрасно работает (и с setTimeout()).
Подпереть можно вот так:
class foo {
function foo() {
with (this) {
setTimeout(this.bar, 1000);
}
}
function bar() {
trace(‘foo.bar called’);
}
}
Тогда все работает.
Эй, флэшеры? Есть мысли? Это баг флэша или я сегодня просто мало поспал?
P.S.: пришлось тупо подпереть с помощью with.
