| /** |
| * A faster alternative to `Function#apply`, this function invokes `func` |
| * with the `this` binding of `thisArg` and the arguments of `args`. |
| * |
| * @private |
| * @param {Function} func The function to invoke. |
| * @param {*} thisArg The `this` binding of `func`. |
| * @param {Array} args The arguments to invoke `func` with. |
| * @returns {*} Returns the result of `func`. |
| */ |
| function apply(func, thisArg, args) { |
| switch (args.length) { |
| case 0: return func.call(thisArg); |
| case 1: return func.call(thisArg, args[0]); |
| case 2: return func.call(thisArg, args[0], args[1]); |
| case 3: return func.call(thisArg, args[0], args[1], args[2]); |
| } |
| return func.apply(thisArg, args); |
| } |
| |
| module.exports = apply; |