silphius/app/util/fast-call.js
2024-06-17 05:20:01 -05:00

37 lines
1.3 KiB
JavaScript

export default function(fn, holder, args) {
if (holder) {
const {name} = fn;
if (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);
}
}