Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как взывать метод объекта через setTimeout (https://javascript.ru/forum/misc/33838-kak-vzyvat-metod-obekta-cherez-settimeout.html)

Faydaen 10.12.2012 17:00

Как взывать метод объекта через setTimeout
 
Не удается взывать функцию объекта через setTimeout (а так же через setInterval). При попытки вызова она выводит undefined

/* есть объект у которого есть аттриубт 
	и функция которая обращается к этому аттрибуту */
	var my = {};
	my.par = 'мой атрибут';
	my.funct = function(){
		alert(this.par);
	}
	
	// при вызови метода объекта просто так она нормально работает
	my.funct(); //выводит "мой атрибут"

	// но если попытаться седлать через setTimeout
	// или setInterval то она не видит своего значения
	setTimeout(my.funct, 1000); //выводит undefined

Подскажите как правильно?

Skipp 10.12.2012 17:10

Ну правильно:
var my = { func: function(){ alert(this); } }
my.func();
setTimeout(my.func, 1000);


Почитай, тут всё написано.

lord2kim 10.12.2012 17:26

Faydaen,
/* есть объект у которого есть аттриубт
    и функция которая обращается к этому аттрибуту */
    var my = {};
    my.par = 'мой атрибут';
    my.funct = function(){
        alert(this.par);
    }
     
    // при вызови метода объекта просто так она нормально работает
    my.funct(); //выводит "мой атрибут"
 
    // но если попытаться седлать через setTimeout
    // или setInterval то она не видит своего значения
    setTimeout("my.funct()", 1000); //выводит
    setTimeout(function() { my.funct(); }, 1000); //выводит

Faydaen 10.12.2012 17:30

спасибо, я вот так реализовал
setTimeout(main, 1000); 
	
	
	function main(){
	my.funct();
	}

nerv_ 10.12.2012 22:06

Цитата:

Сообщение от lord2kim
 setTimeout("my.funct()", 1000); //выводит

ай-яй-яй :nono:

lord2kim 10.12.2012 22:21

nerv_, ну можно и без скобок)

Skipp 11.12.2012 11:08

Цитата:

Сообщение от lord2kim
ну можно и без скобок)

Без скобок нельзя, так как вызовется функция которая ничего не возвращает, кроме как вывода alert, а потом таймер выдаст ошибку.
Цитата:

Сообщение от nerv_
ай-яй-яй

Интересно, почему?
Это же аналог,
setTimeout("alert([typeof this, this, this.constructor, this.prototype])", 1000)

setTimeout(function(){alert([typeof this, this, this.constructor, this.prototype])}, 1000)

setTimeout(new Function("alert([typeof this, this, this.constructor, this.prototype])"), 1000)

setTimeout(Function.call(window, "alert([typeof this, this, this.constructor, this.prototype])"), 1000)

nerv_ 11.12.2012 13:30

Цитата:

Сообщение от Skipp
Интересно, почему?

Цитата:

Строка поддерживается для совместимости, использовать её не рекомендуется.
\\

Skipp 11.12.2012 14:21

nerv_,
это я понимаю:) Там ещё написано:
Цитата:

При указании строки кода - интерпретатор динамически создает анонимную функцию с телом из данной строки.
Вот мне и интересно почему, как я пока понимаю только для того, что бы убрать такое решение в дальнейшем=)

nerv_ 11.12.2012 14:28

Skipp, http://shamansir.github.com/JavaScri...other.timeouts. Начинай читать с "Скрытое использование eval"


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