Function.bind performance (v9)

Revision 9 of this benchmark created by AJ on


Preparation HTML

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


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

Function.prototype.bindThis = function(context){
    var fn = this;
    return function(){
        return fn.apply(context, arguments);
    };
};

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);
  var thisOnly = testfunc.bindThis(testcxt);
</script>

Test runner

Ready to run.

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

Revisions

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