title: Using Function.prototype.bind with an array of arguments?
body: <p>How can I call Function.prototype.bind with an array of arguments, as opposed to hardcoded arguments? (Not using ECMA6, so no spread operator).</p>
  
  <p>I'm trying to put a promises wrapper around a module that uses callbacks and I want to bind all of the arguments passed in to my wrapper method and bind them. Then I want to call the partially applied bound function with my own callback, which will resolve or reject a promise.</p>
  
  <pre><code>var find = function() {
    var deferred, bound;
    deferred = Q.defer();
    bound = db.find.bind(null, arguments);
    bound(function(err, docs) {
      if(err) {
        deferred.fail(err);
      } else {
        deferred.resolve(docs);
      }
    });
    return deferred.promise;
  }
  </code></pre>
  
  <p>But obviously this doesn't work because bind expects arguments rather than an array of arguments. I know I could do this by inserting my callback onto the end of the arguments array and using apply:</p>
  
  <pre><code>arguments[arguments.length] = function(err, docs) { ... }
  db.find.apply(null, arguments);
  </code></pre>
  
  <p>Or by iterating over the arguments array and rebinding the function for each argument:</p>
  
  <pre><code>var bound, context;
  for(var i = 0; i &lt; arguments.length; i++) {
     context = bound ? bound : db.find;
     bound = context.bind(null, arguments[i]);
  }
  bound(function(err, docs) { ... })
  </code></pre>
  
  <p>But both of these methods feel dirty. Any ideas?</p>