Почему не выводится имя? Ведь стрелочная функция сохраняет контекст вызова, по идее все должно работать, но это не так. Если заменить this.name
на obj.name
, то все работает как надо, из этого сделал вывод, что что-то не так с контекстом, поправьте, если что-то не так понял.
const obj = {
name: 'Coal',
float: () => {
setInterval(() => {
console.log(this.name);
}, 1000);
}
}
obj.float();
Дело в том, что this
в стрелочной функции ссылается не на объект, в котором эта функция расположена в коде, а на текущий this
того кода, который эту стрелочную функцию создаёт. Если в код добавить вывод this
, то будет видно, что это либо глобальный объект:
console.log(this + ""); // этот this будет и у стрелочной функции
const obj = {
name: 'Coal',
float: () => {
setTimeout(() => {
console.log(this.name);
}, 1000);
}
}
obj.float();
Чтобы внутри метода float
this
ссылался на obj
, этот метод должен быть традиционной функцией.
const obj = {
name: 'Coal',
float: function() {
console.log("float: ", this.name);
setInterval(() => {
console.log("setInterval: ", this.name);
}, 1000);
}
}
obj.float();
В Вашем коде стрелочная функция, присвоенная float
, сохраняет контекст, в котором создается obj
, но это не obj
с name: 'Coal'
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Мне требуется написать функцию на jsУ этой функции должны быть опциональные аргументы, делаю так
Отправляю файлы через input type="file", FormDataНажимаю на input, выбираю один файл - все нормально
Собственно вопросМожно ли сохранить данные LocalStorage в произвольную директорию и выгрузить их оттуда после? Делаю локальную веб страницу...