Каррирование: из фукнкции типа (A, B) => C сделать возможным A => (B => C)
рони, важно понимать разницу между каррированием и применением функции... У вас одно применение каррирует, а другое применяет... Следует выделить каррирование в отдельный метод!
function curry(f, ...args) {
return f.bind(this, ...args)
}
function printFullName(firstName, lastName, middleName) {
return `${firstName} ${lastName} ${middleName}`
}
var curriedPrintFullName = curry(printFullName, "Semen", "Semenovich", "Kostev");
console.log(curriedPrintFullName());
{
class CurriedFunction extends Function {
constructor(f) {
f = f.bind();
f.__proto__ = CurriedFunction.prototype;
return f;
}
curry(...args) {
return this.bind(null, ...args);
}
}
function printFullName(firstName, lastName, middleName) {
return `${firstName} ${lastName} ${middleName}`
}
const curriedPrintFullName = new CurriedFunction(printFullName).curry("Semen", "Semenovich", "Kostev");
console.log(curriedPrintFullName());
}
В этих примерах вы можете каррировать функции с любым количеством аргументов любое количество раз.