export default function fastCall(fn, holder, args) { if (holder) { const {name} = fn; if ('object' === typeof holder && name in holder && holder[name] === fn) { switch (args.length) { case 0 : return holder[name](); case 1 : return holder[name](args[0]); case 2 : return holder[name](args[0], args[1]); case 3 : return holder[name](args[0], args[1], args[2]); case 4 : return holder[name](args[0], args[1], args[2], args[3]); case 5 : return holder[name](args[0], args[1], args[2], args[3], args[4]); default: return holder[name](...args); } } const bound = fn.bind(holder); switch (args.length) { case 0 : return bound(); case 1 : return bound(args[0]); case 2 : return bound(args[0], args[1]); case 3 : return bound(args[0], args[1], args[2]); case 4 : return bound(args[0], args[1], args[2], args[3]); case 5 : return bound(args[0], args[1], args[2], args[3], args[4]); default: return bound(...args); } } switch (args.length) { case 0 : return fn(); case 1 : return fn(args[0]); case 2 : return fn(args[0], args[1]); case 3 : return fn(args[0], args[1], args[2]); case 4 : return fn(args[0], args[1], args[2], args[3]); case 5 : return fn(args[0], args[1], args[2], args[3], args[4]); default: return fn(...args); } }