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