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", так как он мне известен. Можно ли сделать так, чтобы можно было бы передавать любую функцию с сохранением контекста, без прямого указания этого контекста?
  • Вопрос задан
  • 180 просмотров
Решения вопроса 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(), но зачем, если его сразу можно приколотить к вызываемой функции?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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