37 lines
1.4 KiB
JavaScript
37 lines
1.4 KiB
JavaScript
export default function(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);
|
|
}
|
|
}
|
|
|