Riveran
@Riveran
Astartes

Почему this равен undefined?

Есть функция такого типа:
'use strict';

function downloadExcel(url) {
  const loginModel = CM.getModule('login').model;

  return new Promise(function(resolve, reject) {
    $.get({
      url: url,
      beforeSend: (request) => {
        request.setRequestHeader('Authorization', loginModel.getToken());
      },
      xhrFields: {
        responseType: 'blob'
      },
      // this === undefined ??
      success: fetchSuccess.bind(this, content, resolve),
      error: (error) => {
        console.log(error);
        reject(error);
      }
    })
  })
}

function fetchSuccess(content, resolve) {
  console.log(this);
  downloadLink.download = "data.xls";

  document.body.appendChild(downloadLink);
  downloadLink.click();
  document.body.removeChild(downloadLink);
  resolve();
}

При успешном запросе к серверу, я хочу при помощи .bind передать функции успешного запроса this/content/resolve, но я не могу этого сделать так как this в этой функции равен undefined, и я не могу понять почему.
Может кто то знает как решить эту проблему?
  • Вопрос задан
  • 112 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Потому что

'use strict';

https://developer.mozilla.org/ru/docs/Web/JavaScri...

Может кто то знает как решить эту проблему?

Это не проблема. Всё так, как и должно быть.
Ответ написан
Комментировать
Riveran
@Riveran Автор вопроса
Astartes
success: fetchSuccess.bind(this, resolve),
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AlexanderK-A
@AlexanderK-A
UTC+10
Доброго дня!

Чтобы в литерале объекта сохранить this, надо использовать функцию-метод, при этом bind меняем на call:

$.get({
      ...
      // this === undefined ??
      success(content){
         fetchSuccess.call(this, content, resolve)
      }
      ...
    })
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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