#javascript #функции #область_видимости
На этот вопрос уже даны ответы здесь:
Потеря контекста вызова
(5 ответов)
Закрыт 2 года назад.
Правильно ли я понимаю, что в этом коде в 1-м варианте так как у стрелочных функций
нету this она берет this у "родителя" , а во 2-м варианте this вообще нету поэтому
будет ошибка?
const user = {
name: 'Bob',
city: ["Madrid", 'Rome', 'LA'],
printLocation: function() {
this.city.forEach(city => {
console.log(`${this.name} live in ${city}`)
})
}
}
user.printLocation()
const user2 = {
name: 'Bred',
city: ["Madrid", 'Rome', 'LA'],
printLocation: () => {
this.city.forEach(city => {
console.log(`${this.name} live in ${city}`)
})
}
}
user2.printLocation()
Ответы
Ответ 1
а во 2м варианте this вообще нету this есть, но в данном случае ссылается он на объект window. В стрелочных функциях, this подхватывает значение лексического контекста. Если простым словами, то значение this внутри стрелочной функции, будет таким же, как и снаружи. Однако, в ES6 появились именно методы объекта и для более короткого синтаксиса, можете использовать их: const user = { name: 'Bred', city: ["Madrid", 'Rome', 'LA'], printLocation() { this.city.forEach(city => { console.log(`${this.name} live in ${city}`); }); } }; user.printLocation();Ответ 2
const user = { name: 'Bob', city: ["Madrid", 'Rome', 'LA'], printLocation: function() { this.city.forEach(city => { console.log(`${this.name} live in ${city}`) }) } } user.printLocation() const user2 = { name: 'Bred', city: ["Madrid", 'Rome', 'LA'], printLocation: () => { user2.city.forEach(city => { console.log(`${user2.name} live in ${city}`) }); } } user2.printLocation()
Комментариев нет:
Отправить комментарий