code: function(context) {
      // Optimized: no leaking arguments
      var boundArgs = []; for(var $i = 1, $len = arguments.length; $i < $len; $i++) boundArgs.push(arguments[$i]);
      var fn = this, bound;
      assertCallable(this);
      bound = function() {
        // Optimized: no leaking arguments
        var args = []; for(var $i = 0, $len = arguments.length; $i < $len; $i++) args.push(arguments[$i]);
        return fn.apply(fn.prototype && this instanceof fn ? this : context, boundArgs.concat(args));
      };
      bound.prototype = this.prototype;
      return bound;
    }
docs: *
  @method bind(context, [arg1], ...)
  @returns Function
  @polyfill ES5
  @short Binds `context` as the `this` object for the function when it is
  called. Also allows currying an unlimited number of parameters.
  @extra "currying" means setting parameters ([arg1], [arg2], etc.) ahead of
  time so that they are passed when the function is called later. If
  you pass additional parameters when the function is actually called,
  they will be added to the end of the curried parameters.
  
  @example
  
  logThis.bind('woof')()   -> logs 'woof' as its this object
  addArgs.bind(1, 2, 3)()  -> returns 5 with 1 as the this object
  addArgs.bind(1)(2, 3, 4) -> returns 9
  
  *