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 */ 11function 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 21module.exports = apply; 22