Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > this в setTimeout/setInterval


Автор: Sardar 7.12.2007, 02:32
Код

    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 будет записана ссылка на то окружение, в контексте которого функция описана. Поиск переменных, при выполнении функции производится вниз по списку этих самых процедурных окружений. Таким образом, можно передавать параметры в функции, которые по документации совсем даже не получают никаких параметров...
Автор: http://vingrad.ru/@ksnk Источник: http://forum.vingrad.ru/index.php?show_type=&showtopic=

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)