シナリオによっては、関数のパラメータ名と値に動的にアクセスすることが必要になります。この記事では、この問題に対する確実な解決策を検討します。
次の関数 getParamNames は、提供された関数のパラメータ名を抽出できます:
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; var ARGUMENT_NAMES = /([^\s,]+)/g; function getParamNames(func) { var fnStr = func.toString().replace(STRIP_COMMENTS, ''); var result = fnStr.slice(fnStr.indexOf('(')+1, fnStr.indexOf(')')).match(ARGUMENT_NAMES); if(result === null) result = []; return result; }
getParamNames(getParamNames) // returns ['func'] getParamNames(function (a,b,c,d){}) // returns ['a','b','c','d'] getParamNames(function (a,/*b,c,*/d){}) // returns ['a','d'] getParamNames(function (){}) // returns []
ES6 の登場により、デフォルトのパラメータにより getParamNames 関数が失敗する可能性があります。これに対処するために、更新バージョンが提供されています。
var STRIP_COMMENTS = /(\/\/.*$)|(\/\*[\s\S]*?\*\/)|(\s*=[^,\)]*(('(?:\'|[^'\r\n])*')|("(?:\"|[^"\r\n])*"))|(\s*=[^,\)]*))/mg;
この拡張バージョンはほとんどの場合デフォルトのパラメータを処理しますが、例外が発生する可能性があります。
パラメータ名の取得に加えて、対応する値も必要になる場合があります。これは、配列に変換できるローカル変数引数を介して簡単にアクセスできます:
var args = Array.prototype.slice.call(arguments);
または、配列ジェネリックが利用可能な場合:
var args = Array.slice(arguments);
これらの手法を採用することで、開発者はさまざまなニーズやカスタマイズに応じて、関数のパラメーターと値に動的にアクセスできます。
以上がJavaScript 関数のパラメータ名と値を動的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。