Function.bind performance (v10)

Revision 10 of this benchmark created by Michael on


Preparation HTML

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


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)));
    }; 
};



Function.prototype.bindFourth = function(context){
    var fn = this;

    // Create an array of args to prepend
    var a = new Array( arguments.length-1 );
    for(var i = 1; i < a.length; ++i) a[i] = arguments[i];

    return function(){
        var args = new Array(a.length + arguments.length);          
        var i = 0;
        for(; i < a.length; ++i) args[i] = a[i];
        for(var n = 0; n < arguments.length; ++n, ++i) args[i] = arguments[n];
        return fn.apply(context, args);
    };
};






// 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(testcxt);
  var fourth = testfunc.bindFourth(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.