Skip to content

Instantly share code, notes, and snippets.

@eduardonunesp
Last active April 8, 2016 20:01
Show Gist options
  • Select an option

  • Save eduardonunesp/18a455de1fe2f26d3483 to your computer and use it in GitHub Desktop.

Select an option

Save eduardonunesp/18a455de1fe2f26d3483 to your computer and use it in GitHub Desktop.
Function.prototype.partial = function() {
// CODE HERE
var fn = this, args = Array.prototype.slice.call(arguments);
return function() {
var replace = function(arr) {
var pos = 0;
return {
next : function() {
return arr[pos++];
}
};
};
var replacer = replace(Array.prototype.slice.call(arguments));
var t = [];
args.forEach(function(arg) {
if (arg) {
t.push(arg);
} else {
t.push(replacer.next());
}
});
return fn.apply(this, t);
};
};
var hi = function(a, b, c, d) {
console.log(a + ' ' + b + ' ' + c + ' ' + d);
};
var f = hi.partial(undefined, '2', undefined, '4');
f('1', '3');
@tdantas
Copy link

tdantas commented Oct 30, 2015

bacana ! my 2cents !

Function.prototype.partial = function() {
  var partialArgs = Array.prototype.slice.call(arguments);
  var fn = this;

  return function() {
    var args = Array.prototype.slice.call(arguments);
    var params = partialArgs.map(function(curr) {
      if (!curr)
        return args.shift();
      else 
        return curr;
    });

    fn.apply(fn, params);
  };
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment