Nedávno jsem si prohlížel kód promisify-node, abych viděl, jak autor dokázal převést základní funkce a objekty na slíbené API. Rychle jsem si uvědomil, že čtou podpisy funkcí, aby hledali běžné názvy argumentů zpětného volání jako callback
a cb
. Strategie se zdála zvláštní, ale pravděpodobně nutná.
Trvalo mi několik minut, než jsem vybral funkci JavaScript, která analyzovala názvy argumentů pro funkci, a tady to je:
function getArgs(func) { // First match everything inside the function argument parens. var args = func.toString().match(/function\s.*?\(([^)]*)\)/)[1]; // Split the arguments string into an array comma delimited. return args.split(',').map(function(arg) { // Ensure no inline comments are parsed and trim the whitespace. return arg.replace(/\/\*.*\*\//, '').trim(); }).filter(function(arg) { // Ensure no undefined values are added. return arg; }); }
Takže vzhledem k funkci výše a ukázkové funkci by to fungovalo následovně:
function myCustomFn(arg1, arg2,arg3) { } console.log(getArgs(myCustomFn)); // ["arg1", "arg2", "arg3"]
Nejsou regulární výrazy krásná věc? Nemohu jmenovat mnoho využití pro takovou funkci, ale tady je, pokud chcete něco takového udělat!