arguments
JavaScriptでは、配列のようなオブジェクトであるを介して関数に渡される引数のリストを取得できます。
>> function fun(a, b, c) { console.log(arguments) };
undefined
>> fun(1, 2, 3);
[1, 2, 3]
各引数の正式な名前も含むオブジェクトを取得する方法はありますか?
つまり、上記のような関数を呼び出すと、次のようになります。
{a = 1, b = 2, c = 3}
arguments
JavaScriptでは、配列のようなオブジェクトであるを介して関数に渡される引数のリストを取得できます。
>> function fun(a, b, c) { console.log(arguments) };
undefined
>> fun(1, 2, 3);
[1, 2, 3]
各引数の正式な名前も含むオブジェクトを取得する方法はありますか?
つまり、上記のような関数を呼び出すと、次のようになります。
{a = 1, b = 2, c = 3}
コードが縮小され、関数の引数がコンプレッサー/難読化ツールによって名前が変更されると、一部のデータが失われる可能性があるため、そうすることはお勧めしません。
一部のブラウザでは、この質問で説明されているようにtoString
、関数の表現に基づいて、定義された引数から引数名を解析できます。それを使用して、独自に値をマップできます。
すべてのパラメーターに名前を付ける必要はないことに注意してください。たとえば、上記の関数を呼び出す場合fun(1, 2, 3, 4)
、最後のパラメーターはどの名前にもマップされませんが、arguments
それは存在しません。引数をオブジェクトとして渡すことができます。
仮パラメータの名前はランタイムからは利用できません ( @David Hedlund が指摘しているように、関数の値のテキストの一部を除いて編集します) が、引数の値はオブジェクトを介して利用できます。関数でコードを書いている場合は、もちろん名前を知っているので、そのようなオブジェクトを自分で構築できます:toString()
arguments
function foo(a, b, c) {
return {a: a, b: b, c: c};
}
各引数の正式な名前も含むオブジェクトを取得する方法はありますか?
いいえ。仮パラメータは、宣言された変数と本質的に同じです。各実行コンテキストには、変数オブジェクト (ed3) または環境レコード (ed 5) が関連付けられており、宣言された変数と仮パラメーターがそのプロパティになります。
そのオブジェクトにはアクセスできないため、それを検査して、そのオブジェクトが持つプロパティを確認することはできません。
グローバル実行コンテキストでは、変数はグローバル オブジェクトのプロパティになりますが、関数実行コンテキストでは作成されません。また、グローバル オブジェクトの変数と他のプロパティを区別する正式な方法はありません。