Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.07.2017, 21:28
Аспирант
Отправить личное сообщение для Tanya51 Посмотреть профиль Найти все сообщения от Tanya51
 
Регистрация: 09.07.2017
Сообщений: 49

Объекты и их методы. setTimeout
Задача:
Создайте объект coffeeMachine со свойством message: ‘Your coffee is ready!’ и методом start(), при вызове которого – coffeeMachine.start() – через 3 секунды появляется окно с сообщением, записанным в свойстве объекта message.


мой JS:

var coffeeMachine={
  message: 'Your coffee is ready!',
  start: function(){
            return timer=setTimeout(function() { alert(this.message) }, 3000);
         },
}

coffeeMachine.start();



что самое интересное:
1. когда пишу так alert(coffeeMachine.message)- выводит мне нужное сообщение;
когда так alert(this.message) - undefined.

2. при этом, если так:
start: function(){
            return timer=setTimeout(function() { alert(this.message) }, 3000);
         },


то мне выводит мое сообщение,но в консоле выпадает "timer is not defined" ;

Если я передаю аргумент "timer" в функцию или вообще его убираю из тела функции, то ничего не работает.


Подскажите что не так
Ответить с цитированием
  #2 (permalink)  
Старый 20.07.2017, 21:59
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

start: function() {
  var self = this;
  setTimeout(function() {
    alert(self.message);
  }, 3000);
}
или
start: function() {
  setTimeout((function() {
    alert(this.message);
  }).bind(this), 3000);
}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #3 (permalink)  
Старый 20.07.2017, 22:10
Аспирант
Отправить личное сообщение для Tanya51 Посмотреть профиль Найти все сообщения от Tanya51
 
Регистрация: 09.07.2017
Сообщений: 49

Спасибо. Уже сама разобралась))
Ответить с цитированием
  #4 (permalink)  
Старый 20.07.2017, 22:13
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

еще есть вариант:
start: function() {
  setTimeout(() => {
    alert(this.message);
  }, 3000);
}

Но в старых браузерах работать не будет
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с setTimeout arkadii_parovozov Общие вопросы Javascript 9 01.06.2017 12:47
SetTimeOut анимация javascript thystruby Общие вопросы Javascript 1 15.09.2016 10:43
Зацикливание функции setTimeout MininAS Общие вопросы Javascript 19 14.10.2015 00:02
Как удалить объекты select D_Sergeevich Элементы интерфейса 3 16.09.2014 21:13
Передача контекста через setTimeout decadent jQuery 3 10.02.2011 19:01