Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> this в setTimeout/setInterval 
:(
    Опции темы
Sardar
Дата 7.12.2007, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Код

    MyObj = function () {
        return {
            init: function () {
                this.selfcall(0);
            },
            selfcall: function (t) {
                alert(t);var th=this;
                setTimeout( function(){th.selfcall(t+1)} , 100);
            }
        }
    }

    var obj = new MyObj();
    obj.init();

Вот так - работать будет. Дело в том, что функция, запускаемая по setTimeout выполняется в контексте объекта window. То-есть слово this, при выполнении этой функции указывает совсем не на MyObj. Чтобы как-то выкрутится введен механизм "замыкания" (closure). Можно поискать информацию на эту тему в Гугле, а если своими словами - то при выполнении любой функции создается объект, содержащий все праметры функции и переменные описаные с помощью var внутри ее (окружение). Если же внутри функции описан объект Function, к примеру так, как в этом примере, то в скрытое поле этого самого Function будет записана ссылка на то окружение, в контексте которого функция описана. Поиск переменных, при выполнении функции производится вниз по списку этих самых процедурных окружений. Таким образом, можно передавать параметры в функции, которые по документации совсем даже не получают никаких параметров...
Автор: ksnk Источник: Vingrad


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Се ля ви
Дата 7.12.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 5
Всего: 127



Цитата(Sardar @  7.12.2007,  02:32 Найти цитируемый пост)
Таким образом, можно передавать параметры в функции, которые по документации совсем даже не получают никаких параметров...

По-моему, для этого ещё объект "event" есть... Или это для другого?


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0632 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.