20

inspect.getargspec()JavascriptでPythonと同等のことをしようとしています。

Javascript 関数からリストを取得できることは知っていますが、arguments私が本当に探しているのは、最初に定義された関数の引数の名前です。

これが実際に不可能である場合は、関数の文字列を取得して、つまり、 の内部をmyFunc.toString()解析して、「力ずくで実行」する必要があります。この解析を一般的な方法で行う方法を知っている人はいますか?...function myFunc(...)

ヒントをありがとう。

4

5 に答える 5

24

これには正当な理由はわかりませんが、

var reg = /\(([\s\S]*?)\)/;
var params = reg.exec(func);
if (params) 
     var param_names = params[1].split(',');

funcあなたの関数の名前を仮定します

于 2009-05-27T10:28:19.957 に答える
5

次の関数は、渡された関数のパラメーター名の配列を返します。

function getParamNames(func) {
    var funStr = func.toString();
    return funStr.slice(funStr.indexOf('(')+1, funStr.indexOf(')')).match(/([^\s,]+)/g);
}

使用例:

getParamNames(getParamNames) // returns ['func']
getParamNames(function (a,b,c,d){}) // returns ['a','b','c','d']
于 2012-03-29T11:44:56.237 に答える
4

ここにそのための小さなnodejsモジュールがあります。

https://github.com/kilianc/node-introspect

于 2011-11-22T10:03:07.543 に答える
0

これは、高階関数を使用するバージョンです。私が気に入らないのは、パラメータを配列のメンバーとして指定する必要があることだけです。ただし、少なくとも1回だけ指定する必要があります。

<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var withNamedParams = function(params, lambda) {
    return function() {
        var named = {};
        var max   = arguments.length;

        for (var i=0; i<max; i++) {
            named[params[i]] = arguments[i];
        }

        return lambda(named);
    };
};

var foo = withNamedParams(["a", "b", "c"], function(params) {
    for (var param in params) {
        alert(param + ": " + params[param]);
    }
});

foo(1, 2, 3);
</script>
</head>
<body>

</body>
</html>
于 2009-06-18T09:14:27.023 に答える