Задать вопрос
evgeniy8705
@evgeniy8705
Повелитель вселенной

Можно ли передать функцию с заранее неизвестным контекстом?

Есть вот такой пример:
let delay = (func, ms) => {
     return function() {
          setTimeout(func.bind(obj), ms, ...arguments);
     }
}

let obj = {
     value: `Alex`,
     func: function(inner) {
          console.log(`${this.value} ${inner}`);
     }
};

let f1000 = delay(obj.func, 1000);
let f1500 = delay(obj.func, 1500);

f1000(`1`); // Alex 1
f1500(`2`); // Alex 2


Сейчас прямо передаю в bind контекст объекта "obj", так как он мне известен. Можно ли сделать так, чтобы можно было бы передавать любую функцию с сохранением контекста, без прямого указания этого контекста?
  • Вопрос задан
  • 189 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Функция delay() ничего не должна знать о контексте. Приколачивать контекст нужно там, где он известен и важен:
let delay = (func, ms) => {
     return function() {
          setTimeout(func, ms, ...arguments);
     }
}

...

let f1000 = delay(obj.func.bind(obj), 1000);

В крайнем случае, можно передавать контекст в виде аргумента в delay(), но зачем, если его сразу можно приколотить к вызываемой функции?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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