JavaScriptのargmentsオブジェクト
1774 ワード
アーグメンントオブジェクト
関数コードでは、特殊なオブジェクトアーグメンントを使用して、開発者がパラメータ名を明確に指摘する必要がなく、それらにアクセスすることができます.
例えば、関数sayHi()において、最初のパラメータはメッセージである.argments[0]でもこの値にアクセスできます.すなわち、最初のパラメータの値(最初のパラメータは位置0にあり、2番目のパラメータは位置1にあり、これに類推します.)
したがって、名前のパラメータを明確にする必要はなく、関数を書き換えることができます.
また、argmentsオブジェクト検出関数のパラメータ個数を用いて、属性argments.lengthを参照すれば良い.
以下のコードは、各呼び出し関数で使用するパラメータの個数を出力します.
注記:他のプログラム設計言語と違って、ECMAScriptは関数に伝達されるパラメータの個数が関数定義のパラメータ個数に等しいかどうかを検証しません.開発者が定義した関数は、任意の数のパラメータ(Netscapeのドキュメントによって最大255個まで許容されます)を受け入れることができます.漏れたパラメータはundefinedで関数に伝達されます.余分な関数は無視されます.
アナログ関数の再負荷
関数に伝達するパラメータの個数をargmentsオブジェクトで判断すれば、アナログ関数の再負荷が可能です.
重載ほどではないですが、ECMAScriptのこのような制限はもう避けられます.
パラメータを表す配列です.パラメータの数が決まっていない時に使いやすいです.
関数コードでは、特殊なオブジェクトアーグメンントを使用して、開発者がパラメータ名を明確に指摘する必要がなく、それらにアクセスすることができます.
例えば、関数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のこのような制限はもう避けられます.
パラメータを表す配列です.パラメータの数が決まっていない時に使いやすいです.
function heji() {
var ans = 0;
for (i = 0; i < heji.arguments.length; i++) {
ans += heji.arguments[i];
}
return(ans);
}
sum = heji(1, 2, 3, 4, 5);