よくやるのが
for(int i = 0;・・・ という風に、intなんて思わず使っちゃったり。
これは置いておいて、JavascriptではJavaでいうオーバーロード(引数の数や型が異なるメソッドを宣言すること)ができません。
fooというメソッドがあった場合、Javaなら
foo(String str,int i)と
foo(String str)
foo(int i,int j)が宣言することができ、引数の型や数でメソッドが自動的に選択されます。
ところが、Javascriptにはそもそも変数の型がないし、メソッドはプロパティに関数オブジェクトが代入されているだけなので、同名のメソッドを作ることができないのです。
でも、プログラムを組んでいて、引数を増やしたくなることってありますよね?
フラグをつけたいなあと思ったりすることってあります。
その場合にいままで書いた分全部に新たな引数を加えるなんてすごくイヤです。
というわけで、Javascriptでオーバーロードの真似事を実現するには、
argumentsオブジェクトのlengthによって場合分けをします。
arguments.length
argumentsオブジェクトは引数を表すオブジェクトです。
配列と同じようにlengthが取得できます。
例:
function test(arg1,arg2){
switch (arguments.length) {
case 1: test1(arg1);
case 2: test2(arg1,arg2);
default:
}
}
function test1(arg1){
引数が1個の場合の処理を書く
}
function test2(arg1,arg2){
引数が2個の場合の処理を書く
}
みたいな感じです。
引数の足りない分は固定の値を代入する、というようにすれば、
関数も同じものを呼べるようになって、更に楽になります。