彼らがどのようにそれを行うのかはわかりませんが、簡単な方法があります。
JS のすべてにtoString()
メソッドがあります。関数の場合、その特定の関数のソース コードが表示されます (組み込み関数の場合は、 のようなものが得られる場合がありますfunction() { [native code] }
)。
関数の引数を囲むfirst(
とfirst を見つけてみましょう。)
次に、空白を取り除き、引数を で分割します,
。ほら、引数名の配列を取得します。
function a($scope, $http) { };
function b($http, $scope) { };
function getParameterList(f) {
var s = f.toString();
var start = s.indexOf('(');
var end = s.indexOf(')');
s = s.substring(start + 1, end);
return s.replace(/ /g,'').split(',');
}
それでは、テストしてみましょう。
var aParams = getParameterList(a);
var bParams = getParameterList(b);
alert(aParams[0]); // $scope
alert(aParams[1]); // $http
alert(bParams[0]); // $http
alert(bParams[1]); // $scope
フィドル: http://jsfiddle.net/jYPB8/
ただし、 のこの動作はtoString()
で定義されてFunction.prototype
おり、再定義される可能性があることに注意してください。その場合、このアルゴリズムは機能しません。
したがって、これはあなたが探していた実際の解決策ではないかもしれませんが、この種のリフレクションがJavaScript で可能であり、実際に行うのは非常に簡単であることをお見せしたかったのです :)