JSFiddle - React, Tailwind, and code Playground
by Gonzalo
JavaScript
Function.prototype.p = function() {
// capture the bound arguments
var args = Array.prototype.slice.call(arguments);
var f = this;
// construct a new function
return function() {
// prepend argument list with the closed arguments from above
var inner_args = Array.prototype.slice.call(arguments);
return f.apply(this, args.concat(inner_args))
};
};
var plus_two = function(x,y) { return x+y; };
var add_three = plus_two.p(3);
add_three(4); // 7
/**/
Function.prototype.c = function(g) {
// preserve f
var f = this;
// construct function z
return function() {
var args = Array.prototype.slice.call(arguments);
// when called, nest g's return in a call to f
return f.call(this, g.apply(this, args));
};
};
var greet = function(s) { return 'hi, ' + s; };
var exclaim = function(s) { return s + '!'; };
var excited_greeting = greet.c(exclaim);
excited_greeting('Pickman') // hi, Pickman!