Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.09.2009, 12:54
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,577

Аргументы в setTimeout - проблема в IE 6
Привет.
Из справки : Синтаксис:
window.setTimeout(выражение, интервал)
window.setTimeout(функция, интервал, арг1?, …, аргN?)
Я создаю класс
function myclass()
{
    var self=this; // Для замыкания
    this.myx=777;
    this.delaem=function(x)
    {
	    alert(x);
	    if (self.myx==x) {
		    // действия
			alert('Нужные действия');
        }
    }

    this.zapusk=function()
    {
    var yy=777;
    // определяем что передать
     var tmr=window.setTimeout(this.delaem,2000,yy);
    }
}
obj=new myclass();
obj.zapusk();

В опере и мозилле нормально передает параметр в setTimeout - 777 (и выполняет действия), а в IE - не передает .
Мне нужно обязательно поставить обработчиком - метод класса, потому что
там с помощью замыкания сравниваю и дальше действия. Поэтому в
setTimeout первый аргумент строкой не могу передать никак (без глоб переменных).
Что делать?
Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 25.09.2009, 13:00
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от micscr
Мне нужно обязательно поставить обработчиком - метод класса
И как это связано с передачей параметра?
Ответить с цитированием
  #3 (permalink)  
Старый 25.09.2009, 13:03
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

var _this = this;
...setTimeout(function() {
    _this.delaem(yy);
}, 2000);
Ответить с цитированием
  #4 (permalink)  
Старый 25.09.2009, 13:18
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,577

Спасибо Octane вот теперь все работает.

Двойное замыкание - просто супер.
Ответить с цитированием
  #5 (permalink)  
Старый 25.09.2009, 14:44
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от micscr
Двойное замыкание - просто супер.
Там не обязательно _this объявлять, self же уже есть.
__________________
Тонкости ECMAScript
Ответить с цитированием
  #6 (permalink)  
Старый 28.09.2009, 12:15
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Dmitry A. Soshnikov
Там не обязательно _this объявлять, self же уже есть.
Ой, а можно подробнее?! Что такое self?!
Ответить с цитированием
  #7 (permalink)  
Старый 28.09.2009, 12:21
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от B~Vladi
Ой, а можно подробнее?! Что такое self?!
Сообщение от micscr
var self=this;
Я просто с телефона отвечал и не заметил, что ссылка на this уже есть.
Ответить с цитированием
  #8 (permalink)  
Старый 28.09.2009, 12:22
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Octane
var self=this;
Ааа...
А я тут про другое совсем подумал...
Ответить с цитированием
  #9 (permalink)  
Старый 28.09.2009, 13:08
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от B~Vladi
А я тут про другое совсем подумал...
Ну, есть ещё и глобальный хост-объект self - рекурсивная ссылка на window (и как следствие, на global):

alert(self);


Правда, в IE равенства

alert(self === window);
alert(self === this);


выдают false (тогда как во всех остальных браузерах - true), а равенства:

alert(self == window);
alert(self == this);


в IE (как и везде) выдают true.

Но равенства:

alert(this.self === this.window);


и

alert(window.self === self.window);


выдают в IE также true.
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 28.09.2009 в 14:36.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема с this AntonE Общие вопросы Javascript 6 09.07.2009 12:38
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47
Проблема с маркером kostian02 Общие вопросы Javascript 0 23.06.2008 16:10