@vs1710

Почему this в данном примере указывает на глобальный объект window?

Подскажите пожалуйста почему this в данном случае ссылается прямо на window а не на функцию выше.
т.е. ПОЧЕМУ в callback фунции внутри map [Scope]] указывает не внешний объект переменных, а window.
const cars = {
   brands: ['ford', 'audi', 'bmw'],
   category: 'sport car',
   message: function() {
      return this.brands.map(function (brand) { 
         console.log(`The ${brand} is a ${this}`);
      });
   }
}
cars.message();
  • Вопрос задан
  • 186 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Потому что функция не вызывается на каком либо объекте, а вызывается:
mappedValue = callback.call(T, kValue, k, O);
где T - опционально переданный второй аргумент. Если он не передан туда поподает undefined и в обычном режиме undefined заменяется на Window, а в строгом остается undefined.

Исправить можно использовав стрелочную функцию для колбека map:
return this.brands.map(brand => console.log(` The ${brand} is a ${this}`));

или передав контекст:
return this.brands.map(function(brand) { console.log(` The ${brand} is a ${this}`; }, this));

Стрелочным функциям передать контекст нельзя.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Передавайте в map вторым аргументом this
const cars = {
   brands: ['ford', 'audi', 'bmw'],
   category: 'sport car',
   message: function() {
      return this.brands.map(function (brand) { 
         console.log(`The ${brand} is a ${this}`);
      }, this);
   }
}
cars.message();
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы