引数オブジェクト
関数コードでは、特別なオブジェクト引数が使用されます。開発者は、パラメーター名を明示的に指摘することなくアクセスできます。
たとえば、関数Sayshi()では、最初のパラメーターはメッセージです。この値は、引数[0]、つまり最初のパラメーターの値(最初のパラメーターは位置0、2番目のパラメーターは位置1など)でアクセスすることもできます。
したがって、パラメーターに明示的に名前を付けることなく、関数をオーバーライドできます。
function sayshi(){if(arguments [0] == "bye"){return;} alert(arguments [0]);}検出パラメーターの数
また、引数オブジェクトを使用して関数のパラメーターの数を検出し、属性引数を参照することもできます。
次のコードは、各呼び出しに使用されるパラメーターの数を関数に出力します。
関数howmanyargs(){alert(arguments.length);} howmanyargs( "string"、45); howmanyargs(); howmanyargs(12);上記のコードには、「2」、「0」、「1」が順番に表示されます。
注:他のプログラミング言語とは異なり、ECMAScriptは、関数に渡されるパラメーターの数が関数によって定義されたパラメーターの数に等しいことを確認しません。開発者によって定義された関数は、エラーを投げることなく(Netscapeのドキュメントによると、最大255まで)、任意の数のパラメーターを受け入れることができます。欠落しているパラメーターは、未定義として関数に渡され、冗長機能は無視されます。
関数の過負荷をシミュレートします
引数オブジェクトを使用して、関数に渡されたパラメーターの数を決定し、関数の過負荷をシミュレートします。
function doadd(){if(arguments.length == 1){alert(arguments [0] + 5);} else if(arguments.length == 2){alert(arguments [0] + arguments [1]);}}}}doadd(10); //出力 "15"
doadd(40、20); //出力 "60"
パラメーターが1つしかない場合、doadd()関数はパラメーターに5を追加します。 2つのパラメーターがある場合、2つのパラメーターが追加され、合計が返されます。したがって、doadd(10)は「15」を出力し、doadd(40、20)は「60」を出力します。
過負荷ほど良くはありませんが、ECMAScriptのこの制限を回避するのに十分です。