Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.12.2012, 17:00
Новичок на форуме
Отправить личное сообщение для Faydaen Посмотреть профиль Найти все сообщения от Faydaen
 
Регистрация: 29.07.2012
Сообщений: 2

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

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

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

Подскажите как правильно?
Ответить с цитированием
  #2 (permalink)  
Старый 10.12.2012, 17:10
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

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


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

Последний раз редактировалось Skipp, 10.12.2012 в 17:19.
Ответить с цитированием
  #3 (permalink)  
Старый 10.12.2012, 17:26
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

Faydaen,
/* есть объект у которого есть аттриубт
    и функция которая обращается к этому аттрибуту */
    var my = {};
    my.par = 'мой атрибут';
    my.funct = function(){
        alert(this.par);
    }
     
    // при вызови метода объекта просто так она нормально работает
    my.funct(); //выводит "мой атрибут"
 
    // но если попытаться седлать через setTimeout
    // или setInterval то она не видит своего значения
    setTimeout("my.funct()", 1000); //выводит
    setTimeout(function() { my.funct(); }, 1000); //выводит
Ответить с цитированием
  #4 (permalink)  
Старый 10.12.2012, 17:30
Новичок на форуме
Отправить личное сообщение для Faydaen Посмотреть профиль Найти все сообщения от Faydaen
 
Регистрация: 29.07.2012
Сообщений: 2

спасибо, я вот так реализовал
setTimeout(main, 1000); 
	
	
	function main(){
	my.funct();
	}
Ответить с цитированием
  #5 (permalink)  
Старый 10.12.2012, 22:06
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от lord2kim
 setTimeout("my.funct()", 1000); //выводит
ай-яй-яй
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #6 (permalink)  
Старый 10.12.2012, 22:21
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

nerv_, ну можно и без скобок)
Ответить с цитированием
  #7 (permalink)  
Старый 11.12.2012, 11:08
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

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

Последний раз редактировалось Skipp, 11.12.2012 в 11:17.
Ответить с цитированием
  #8 (permalink)  
Старый 11.12.2012, 13:30
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Skipp
Интересно, почему?
Цитата:
Строка поддерживается для совместимости, использовать её не рекомендуется.
\\
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #9 (permalink)  
Старый 11.12.2012, 14:21
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

nerv_,
это я понимаю Там ещё написано:
Цитата:
При указании строки кода - интерпретатор динамически создает анонимную функцию с телом из данной строки.
Вот мне и интересно почему, как я пока понимаю только для того, что бы убрать такое решение в дальнейшем=)
__________________
.
Ответить с цитированием
  #10 (permalink)  
Старый 11.12.2012, 14:28
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Skipp, http://shamansir.github.com/JavaScri...other.timeouts. Начинай читать с "Скрытое использование eval"
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передача объекта через параметр функции PHP zhurchik Серверные языки и технологии 1 06.12.2012 15:24
Как передать через onchange несколько параметров? Arey AJAX и COMET 5 14.08.2012 16:31
Как сделать плагин jQuery в виде объекта? SkaN jQuery 12 28.06.2012 12:31
Как обновить страницу открытую через post Роберт Общие вопросы Javascript 1 05.11.2008 14:53
Очень простой как даже по мне вопрос по поводу setTimeout & setInterval Хранитель Света Общие вопросы Javascript 5 12.07.2008 20:34