* 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)
| 15883 | * @returns {Function} Returns the new wrapped function. |
| 15884 | */ |
| 15885 | function createCtorWrapper(Ctor) { |
| 15886 | return function() { |
| 15887 | // Use a `switch` statement to work with class constructors. |
| 15888 | // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist |
| 15889 | // for more details. |
| 15890 | var args = arguments; |
| 15891 | switch (args.length) { |
| 15892 | case 0: return new Ctor; |
| 15893 | case 1: return new Ctor(args[0]); |
| 15894 | case 2: return new Ctor(args[0], args[1]); |
| 15895 | case 3: return new Ctor(args[0], args[1], args[2]); |
| 15896 | case 4: return new Ctor(args[0], args[1], args[2], args[3]); |
| 15897 | case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); |
| 15898 | case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); |
| 15899 | case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); |
| 15900 | } |
| 15901 | var thisBinding = baseCreate(Ctor.prototype), |
| 15902 | result = Ctor.apply(thisBinding, args); |
| 15903 | |
| 15904 | // Mimic the constructor's `return` behavior. |
| 15905 | // See https://es5.github.io/#x13.2.2 for more details. |
| 15906 | return isObject(result) ? result : thisBinding; |
| 15907 | }; |
| 15908 | } |
| 15909 | |
| 15910 | module.exports = createCtorWrapper; |
| 15911 |
no test coverage detected