title: How can I call a javascript constructor using call or apply?
body: <p>How could I generalise the function below to take N arguments?  (Using call or apply?)</p>
  
  <p>Is there a programmatic way to apply arguments to 'new'? I don't want the constructor to be treated like a plain function.</p>
  
  <pre><code>/**
   * This higher level function takes a constructor and arguments
   * and returns a function, which when called will return the 
   * lazily constructed value.
   * 
   * All the arguments, except the first are pased to the constructor.
   * 
   * @param {Function} constructor
   */ 
  
  function conthunktor(Constructor) {
      var args = Array.prototype.slice.call(arguments, 1);
      return function() {
          console.log(args);
          if (args.length === 0) {
              return new Constructor();
          }
          if (args.length === 1) {
              return new Constructor(args[0]);
          }
          if (args.length === 2) {
              return new Constructor(args[0], args[1]);
          }
          if (args.length === 3) {
              return new Constructor(args[0], args[1], args[2]);
          }
          throw("too many arguments");    
      }
  }
  </code></pre>
  
  <p>qUnit test:</p>
  
  <pre><code>test("conthunktorTest", function() {
      function MyConstructor(arg0, arg1) {
          this.arg0 = arg0;
          this.arg1 = arg1;
      }
      MyConstructor.prototype.toString = function() {
          return this.arg0 + " " + this.arg1;
      }
  
      var thunk = conthunktor(MyConstructor, "hello", "world");
      var my_object = thunk();
      deepEqual(my_object.toString(), "hello world");
  });
  </code></pre>