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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вызов setInterval в объекте, обьясните 
V
    Опции темы
Igor_K
  Дата 17.11.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

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



Я не пойму почему такое происходит. Кто-то сможет обьяснить?

Такой код
Код

var a = function ()
{
    this.j = 12345;

    this.b = function ()
    {
        var t = this;
        setInterval(function() { t.c() }, 5000);
    }

    this.c = function ()
    {
        alert(this.j);
    }
}

obj = new a;
obj.b();

работает. Главное тут это
Код

var t = this;
setInterval(function() { t.c() }, 5000);

а если 
Код

setInterval(function() { this.c() }, 5000);

то не работает. Почему так? Получается же  t тот же самый this.  smile 

И как правильно вызывать setInterval в объекте? Может я что-то не так делаю?
PM MAIL   Вверх
Itsys
Дата 18.11.2009, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 12
Всего: 34



Статья
Можно так:
Код

var a = function ()
{
    this.j = 12345;

    this.b = function ()
    {
        (function(t){
            setInterval(function{t.c()}, 5000);
        })(this);
    }

    this.c = function ()
    {
        alert(this.j);
    }
}
obj = new a;
obj.b();

PM MAIL WWW Skype   Вверх
brother79
Дата 18.11.2009, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 1
Всего: 6



Цитата(Igor_K @  17.11.2009,  22:54 Найти цитируемый пост)
то не работает. Почему так? Получается же  t тот же самый this.  smile 



Потому что когда ты написал
Код

 var t=this 

- создалось замыкание, т.е. теперь переменная t будет жить везде, что внутри блока, в котором ты э
то написал, в т.ч. и во всех ф-ях описанных в нём.

А когда ты написал 

Код

setInterval(function() { this.c() }, 5000);


- создался объект - функция, которая стала не св-вом твоего класса, а св-вом другого класса, я счас не могу это подробней объяснить, но ты попробуй в этой ф-ии написать alert(this) и посмотри кто для неё this, т.е. тот класс, от имени которого она потом будет вызываться.

Надеюсь доступно объяснил.


--------------------
PM MAIL WWW   Вверх
IDVsbruck
Дата 18.11.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 8
Всего: 22



setInterval(...) - то же, что и window.setInterval(...), соответственно, this внутри функции setInterval'a - это ссылка не на твой объект, а на window ... думаю, продолжать разжевывать не нужно ...
PM MAIL   Вверх
Igor_K
Дата 19.11.2009, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 4.2.2008
Где: Kyiv

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



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


 




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


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

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