こんな場合はこの記事を見てね!
そのものずばり!の内容じゃなくてもヒントになるはずです♪
ファイルをアップロードしようと思ったら「アクセスが拒否されました」
ウインドウをリサイズ、移動しようとしたら「アクセスが拒否されました」
form部品の初期値を取得したい、初期値に戻したい
form部品すべてにアクセスしたい
配列の値を削除したい
配列の値を並び替えたい
javascriptでtry-catch!
IEでclass名を取得したい
IEでonclick属性をセットしたい

2006年10月06日

Javascriptでオーバーロードを実現する

JavaをやっていてJavascriptを触ったりすると非常にごちゃごちゃになります。
よくやるのが
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個の場合の処理を書く
}
みたいな感じです。
引数の足りない分は固定の値を代入する、というようにすれば、
関数も同じものを呼べるようになって、更に楽になります。



ちょっと使えるぞ♪と思ったらクリックして頂くと励みになります。ビジネスブログ100選
この記事へのコメント
cで言うところ、printfとかscanfみたいな実装ですね。
Posted by nyi at 2008年09月15日 12:26
さらにtypeofを使えばオーバーロード的なことができますね。
Posted by 名無し at 2014年10月21日 14:10
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック