| 12345678910111213141516171819202122232425262728293031323334353637 | var baseCreate = require('./_baseCreate'),    isObject = require('./isObject');/** * Creates a function that produces an instance of `Ctor` regardless of * whether it was invoked as part of a `new` expression or by `call` or `apply`. * * @private * @param {Function} Ctor The constructor to wrap. * @returns {Function} Returns the new wrapped function. */function createCtor(Ctor) {  return function() {    // Use a `switch` statement to work with class constructors. See    // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist    // for more details.    var args = arguments;    switch (args.length) {      case 0: return new Ctor;      case 1: return new Ctor(args[0]);      case 2: return new Ctor(args[0], args[1]);      case 3: return new Ctor(args[0], args[1], args[2]);      case 4: return new Ctor(args[0], args[1], args[2], args[3]);      case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);      case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);      case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);    }    var thisBinding = baseCreate(Ctor.prototype),        result = Ctor.apply(thisBinding, args);    // Mimic the constructor's `return` behavior.    // See https://es5.github.io/#x13.2.2 for more details.    return isObject(result) ? result : thisBinding;  };}module.exports = createCtor;
 |