Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Аргументы в setTimeout - проблема в IE 6 (https://javascript.ru/forum/misc/5199-argumenty-v-settimeout-problema-v-ie-6-a.html)

micscr 25.09.2009 12:54

Аргументы в 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 первый аргумент строкой не могу передать никак (без глоб переменных).
Что делать?
Спасибо.

Kolyaj 25.09.2009 13:00

Цитата:

Сообщение от micscr
Мне нужно обязательно поставить обработчиком - метод класса

И как это связано с передачей параметра?

Octane 25.09.2009 13:03

var _this = this;
...setTimeout(function() {
    _this.delaem(yy);
}, 2000);

micscr 25.09.2009 13:18

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

Двойное замыкание - просто супер.

Dmitry A. Soshnikov 25.09.2009 14:44

Цитата:

Сообщение от micscr
Двойное замыкание - просто супер.

Там не обязательно _this объявлять, self же уже есть.

B~Vladi 28.09.2009 12:15

Цитата:

Сообщение от Dmitry A. Soshnikov
Там не обязательно _this объявлять, self же уже есть.

Ой, а можно подробнее?! Что такое self?!

Octane 28.09.2009 12:21

Цитата:

Сообщение от B~Vladi
Ой, а можно подробнее?! Что такое self?!

Цитата:

Сообщение от micscr
var self=this;

Я просто с телефона отвечал и не заметил, что ссылка на this уже есть.

B~Vladi 28.09.2009 12:22

Цитата:

Сообщение от Octane
var self=this;

Ааа... :(
А я тут про другое совсем подумал...

Dmitry A. Soshnikov 28.09.2009 13:08

Цитата:

Сообщение от 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.


Часовой пояс GMT +3, время: 12:52.