Самодельная реализация функции bind

Верните обёртку, вызывающую fn.apply(context, args). Она принимает любое число аргументов и возвращает результат исходной функции без использования bind.

Короткий ответ

Что ответить на собеседовании

Верните обёртку, вызывающую fn.apply(context, args). Она принимает любое число аргументов и возвращает результат исходной функции без использования bind.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо написать функцию myBind(fn, context), которая возвращает новую функцию. При её вызове оригинальная функция fn должна исполняться в переданном контексте context и принимать любые переданные аргументы.

const obj = {
  a: 1,
  show(num) {
    if (num !== undefined) {
      console.log(this.a + num);
      return;
    }
    console.log(this.a);
  },
};

const fn = obj.show.bind(obj);
fn();

myBind(fn, obj)();

В примере показано, как стандартный bind привязывает метод show к объекту obj. Ваша задача – реализовать аналогичный механизм без использования встроенного Function.prototype.bind. Функция должна корректно работать как без аргументов, так и с переданными параметрами.

Ответ

Верните обёртку, вызывающую fn.apply(context, args). Она принимает любое число аргументов и возвращает результат исходной функции без использования bind.

function myBind(fn, context) {
  return function (...args) {
    return fn.apply(context, args);
  };
}

Для obj.show вызов myBind(obj.show, obj)(3) выведет 4. Уже привязанную через bind функцию нельзя перепривязать другим apply: в примере fn всё равно сохраняет исходный obj. Это простой контракт обычного вызова, не полный polyfill: поведение с new, name/length и частично заданными аргументами здесь не реализовано.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее