Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   setInterval не работает this (http://www.flasher.ru/forum/showthread.php?t=137169)

AzagThoth 06.03.2010 01:58

setInterval не работает this
 
Здравствуйте.
Столкнулся с интересной проблемой, если в функции вызываемой при помощи setInterval попробовать обратиться к this, то как это не странно this возвращает undefined.
Код AS1/AS2:

Object.prototype.test=function(){
        trace(this.test);
        if(t==undefined){
                t=setInterval(this.test,100);
        }
}
a={};
a.test();

Вот что в Output вижу:
[type Function]
undefined
undefined
undefined
undefined
undefined
Ещё вариант:
Код AS1/AS2:

Object.prototype.test=function(){
        trace(this);
        if(t==undefined){
                t=setInterval(this.test,100);
        }
}
a={};
a.test();

Вот что в Output вижу:
[object Object]
undefined
undefined
undefined
undefined
undefined
Почему так? Почему this возвращает undefined? Занимаюсь по книжке Гурского, так вот, если верить ему(глава про ОПП во Flash) то this никогда undefined не должна возвращать. Очень интересный и важный вопрос, пожалуйста помогите.

udaaff 06.03.2010 02:09

Код AS1/AS2:

setInterval(this, 'test', 100);


AzagThoth 06.03.2010 02:17

to udaaff
Невероятно, но факт описание в справке по AS1/AS2:
Код AS1/AS2:

setInterval()
Доступность
Flash Player 6.
 
Синтаксис
setInterval(functionName:Function, interval:Number [, param1:Object, param2, ..., paramN]) : Number
 
Параметры
functionName Имя функции или ссылка на безымянную (анонимную) функцию.
 
interval Промежуток времени, через который вызывается фунция functionName , в миллисекундах.
 
param1, param2, ..., paramN Необязательные параметры, передаваемые вызываемой функции или методу.
 
Возвращает
Число-идентификатор, которое может быть передано clearInterval() для отмены циклического вызова функции.
 
Описание
Функция; периодически вызывает указанную функцию или метод. Вы можете использовать это для обновления значения переменных в базе данных или обновления величины, показывающей какое-либо время.
 
Если interval меньше, чем соответствующей частоте кадров ролика интервал (например, 10 кадров в секунду [fps] соответствуют интервалу в 100 миллисекунд), функция будет вызываться с максимально возможно близкой (при данной частоте кадров) к interval частотой. Вы должны использовать функцию updateAfterEvent(), если необходимо обновлять изображение на экране. Если же занчение interval больше, чем соответствующее данной частоте кадров ролика значение, вызов функции будет происходить при каждой смене кадров (точнее, когда воспроизводящая головка на Таймлайне входит в кадр); это минимизирует излишне частое обновление экрана.

Отлично видно, что второй параметр ИНТЕРВАЛ, первый имя функции, третий массив из передаваемых аргументов.
Внимание вопрос. Почему у Вас первый параметр объект содержащий функцию, а второй имя функции, почему третий не массив аргументов, а интервал вызова??? Или есть какой-то ещё тайный справочник по AS1/AS2? Тогда пожалуйста подскажите где достать его.

Добавлено через 3 минуты
Просто всё действительно помогло, и работает. Просто интерестно откуда Вы это взяли? Где нормальный хелп по командам?

udaaff 06.03.2010 02:23

Код:

ActionScript 2.0 Language Reference
       
ActionScript language elements > Global Functions > setInterval function 
 
setInterval function
setInterval(functionReference:Function, interval:Number, [param1:Object, param2, ..., paramN]) : Number
setInterval(objectReference:Object, methodName:String, interval:Number, [param1:Object, param2, ..., paramN]) : Number

Цитата:

Или есть какой-то ещё тайный справочник по AS1/AS2? Тогда пожалуйста подскажите где достать его.
Тайный справочник становится явным по нажатию F1 во Flash.

AzagThoth 06.03.2010 02:25

Спасибо за ответ :) Вопрос закрыт.

etc 06.03.2010 14:52

AzagThoth, найдите справку посвежее.


Часовой пояс GMT +4, время: 16:14.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.