* 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.
(Ctor)
| 5073 | * @returns {Function} Returns the new wrapped function. |
| 5074 | */ |
| 5075 | function createCtor(Ctor) { |
| 5076 | return function() { |
| 5077 | // Use a `switch` statement to work with class constructors. See |
| 5078 | // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist |
| 5079 | // for more details. |
| 5080 | var args = arguments; |
| 5081 | switch (args.length) { |
| 5082 | case 0: return new Ctor; |
| 5083 | case 1: return new Ctor(args[0]); |
| 5084 | case 2: return new Ctor(args[0], args[1]); |
| 5085 | case 3: return new Ctor(args[0], args[1], args[2]); |
| 5086 | case 4: return new Ctor(args[0], args[1], args[2], args[3]); |
| 5087 | case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); |
| 5088 | case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); |
| 5089 | case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); |
| 5090 | } |
| 5091 | var thisBinding = baseCreate(Ctor.prototype), |
| 5092 | result = Ctor.apply(thisBinding, args); |
| 5093 | |
| 5094 | // Mimic the constructor's `return` behavior. |
| 5095 | // See https://es5.github.io/#x13.2.2 for more details. |
| 5096 | return isObject(result) ? result : thisBinding; |
| 5097 | }; |
| 5098 | } |
| 5099 | |
| 5100 | /** |
| 5101 | * Creates a function that wraps `func` to enable currying. |
no test coverage detected