JavaScriptのargmentsオブジェクト応用例

1411 ワード

アーグメンントオブジェクト
関数コードでは、特殊なオブジェクトアーグメンントを使用して、開発者がパラメータ名を明確に指摘する必要がなく、それらにアクセスすることができます.
例えば、関数sayHi()において、最初のパラメータはメッセージである.argments[0]でもこの値にアクセスできます.すなわち、最初のパラメータの値(最初のパラメータは位置0にあり、2番目のパラメータは位置1にあり、これに類推します.)
したがって、名前のパラメータを明確にする必要はなく、関数を書き換えることができます.

function sayHi() {
if (arguments[0] == "bye") {
return;
}

alert(arguments[0]);
}
検出パラメータの個数
また、argmentsオブジェクト検出関数のパラメータ個数を用いて、属性argments.lengthを参照すれば良い.
以下のコードは、各呼び出し関数で使用するパラメータの個数を出力します.

function howManyArgs() {
alert(arguments.length);
}

howManyArgs("string", 45);
howManyArgs();
howManyArgs(12);
上のコードは順に「2」、「0」、「1」と表示されます.
注記:他のプログラム設計言語と違って、ECMAScriptは関数に伝達されるパラメータの個数が関数定義のパラメータ個数に等しいかどうかを検証しません.開発者が定義した関数は、任意の数のパラメータ(Netscapeのドキュメントによって最大255個まで許容されます)を受け入れることができます.漏れたパラメータはundefinedで関数に伝達されます.余分な関数は無視されます.アナログ関数の再負荷
関数に伝達するパラメータの個数をargmentsオブジェクトで判断すれば、アナログ関数の再負荷が可能です.

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」
パラメータが一つしかない場合、doAdd()関数はパラメータに5を加えます.二つのパラメータがあると、二つのパラメータを加算して、それらの和を返します.したがって、doAdd(10)は「15」を出力し、doAdd(40,20)は「60」を出力します.
重載ほどではないですが、ECMAScriptのこのような制限はもう避けられます.