Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объекты и их методы. setTimeout (https://javascript.ru/forum/misc/69832-obekty-i-ikh-metody-settimeout.html)

Tanya51 20.07.2017 21:28

Объекты и их методы. 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" в функцию или вообще его убираю из тела функции, то ничего не работает.


Подскажите что не так

devote 20.07.2017 21:59

start: function() {
  var self = this;
  setTimeout(function() {
    alert(self.message);
  }, 3000);
}
или
start: function() {
  setTimeout((function() {
    alert(this.message);
  }).bind(this), 3000);
}

Tanya51 20.07.2017 22:10

Спасибо. Уже сама разобралась))

devote 20.07.2017 22:13

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

Но в старых браузерах работать не будет


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