Как реализовать отображение в массиве через this без ES6?

Есть такой код:
spoiler
var tahoe = {
  resorts: ["Kirkwood","Squaw","Alpine","Heavenly","Northstar"],
  print: function(delay=1000) {
    setTimeout(function() {
      console.log(this.resorts.join(","))
    }, delay)
  }
}
tahoe.print()
- ссылка на кодпен
Но фишка в том, что в консоли выбивает ошибку Cannot read property 'join' of undefined. Знаю, что можно использовать стрелочную функцию, чтобы был доступен правильный контекст - вот ссылка со стрелочной. А как можно сделать без ES6?
  • Вопрос задан
  • 130 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Можно использовать bind:

setTimeout(function() {
  console.log(this.resorts.join(', '));
}.bind(this), delay);

Или в переменную сохранить текущий контекст до вызова setTimeout и использовать её вместо this:

var that = this;
setTimeout(function() {
  console.log(that.resorts.join(', '));
}, delay);
Ответ написан
loktionov129
@loktionov129
Backend .NET Developer
Как вариант
var tahoe = {
  resorts: ["Kirkwood","Squaw","Alpine","Heavenly","Northstar"],
  print: function(delay=1000) {
    setTimeout(function(self) {
      console.log(self.resorts.join(","))
    }, delay, this);
  }
}
tahoe.print();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы