Почему этот код не работает?

function magic(f) {
  return f();
}

let date = new Date();

magic(date.getMonth);
magic(date.getDay)


А тут работает:

function magic(f) {
  return f();
}

let obj = {
  some: function () {
    return 1;
  }
};

magic(obj.some);
  • Вопрос задан
  • 529 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Потому что date.getMonth внутри использует this, который с вашей магией теряется.
Вот так будет работать: magic(date.getMonth.bind(date));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08 Куратор тега JavaScript
https://habr.com/ru/company/ruvds/blog/422089/

Если хочешь чтоб работало так, как хочется тебе, то методы для объектов надо объявлять иначе.
class b {
  a = 123; 
  func = () => {
    console.log(this.a)
  }
}

function func(f) {
  return f()
}

func(new b().func) // 123


В твоем первом примере, при вызове функции, она не ссылается на объект, значит ей задается глобальный контекст. Второй пример аналогичен первому, и работает так-же, просто замени единицу на this.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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