Function.bind performance (v5)

Revision 5 of this benchmark created by Dan on


Preparation HTML

<script>
var slice = Array.prototype.slice,
    push = Array.prototype.push;


Function.prototype.bindSimplified = function(context){
    var fn = this;
    return function(){
        return this instanceof fn ? fn() : fn.call(context, arguments[0]);
    };
};

Function.prototype.bindFirst = function(context){
    var fn = this, args = slice.call(arguments,1);
    return function(){
        return fn.apply(context, args.concat(slice.call(arguments)));
    };
};

Function.prototype.secondBind = function(context){
    var fn = this, linked = [];
    push.apply(linked, arguments);
    linked.shift();

    return function(){
       var args = [];
       push.apply(args, linked);
       push.apply(args, arguments);
       return fn.apply(context, args);
    };
};

Function.prototype.bindThird = function (object) {
    var originalFunction = this, args = slice.call(arguments), object = args.shift();
    return function () {
       return originalFunction.apply(object, args.concat(slice.call(arguments)));
    }; 
};

// test function and context
  var testcxt = {},
      testarg1 = 'test',
      testarg2 = {},
      testarg3 = 1,
      testarg4 = {},
      testfunc = function() {

      },
      testfunc1 = function() {
    
      };
;

  
  var first = testfunc.bindFirst(testcxt);
  var second = testfunc.secondBind(testcxt);
  var third = testfunc.bindThird(testcxt);
  var native = testfunc.bind ? testfunc.bind(testcxt) : testfunc.secondBind(testcxt);
  var simple = testfunc.bindSimplified(testcxt);

</script>

Test runner

Ready to run.

Testing in
TestOps/sec
First
first(testarg3)
ready
Second
second(testarg3)
ready
Third
third(testarg3)
ready
Native
native(testarg3)
ready
Simplified
simple(testarg3); //just to test "light" variant
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.