Yang Guo | 4fd355c | 2019-09-19 08:59:03 | [diff] [blame] | 1 | /** |
| 2 | * A faster alternative to `Function#apply`, this function invokes `func` |
| 3 | * with the `this` binding of `thisArg` and the arguments of `args`. |
| 4 | * |
| 5 | * @private |
| 6 | * @param {Function} func The function to invoke. |
| 7 | * @param {*} thisArg The `this` binding of `func`. |
| 8 | * @param {Array} args The arguments to invoke `func` with. |
| 9 | * @returns {*} Returns the result of `func`. |
| 10 | */ |
| 11 | function apply(func, thisArg, args) { |
| 12 | switch (args.length) { |
| 13 | case 0: return func.call(thisArg); |
| 14 | case 1: return func.call(thisArg, args[0]); |
| 15 | case 2: return func.call(thisArg, args[0], args[1]); |
| 16 | case 3: return func.call(thisArg, args[0], args[1], args[2]); |
| 17 | } |
| 18 | return func.apply(thisArg, args); |
| 19 | } |
| 20 | |
| 21 | module.exports = apply; |