JavaScript

関数の引数名を取得する

More than 5 years have passed since last update.

AngularJSのDIとかで利用されているやつです。

関数オブジェクトのtoString()メソッドがソースコードを返すので、それを利用します。

function getParams(func) {

var source = func.toString()
.replace(/\/\/.*$|\/\*[\s\S]*?\*\/|\s/gm, ''); // strip comments
var params = source.match(/\((.*?)\)/)[1].split(',');
if (params.length === 1 && params[0] === '')
return [];
return params;
}

関数のソースコードを正規表現使ってゴリゴリと処理します。

getParams(function() {}); // => []

getParams(function(a) {}); // => ['a']
getParams(function(a, b) {}); // => ['a', 'b']
getParams(function(a, /* 途中に改行があっても、、、 */
b) {}); // => ['a', 'b']

こんな感じで使えるはずです。

バグとかあったら教えて下さい。