• ベストアンサー
  • 暇なときにでも

引数の数によって関数の動作を変えるには?

  • 質問No.5841966
  • 閲覧数768
  • ありがとう数10
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 93% (56/60)

引数の数によって関数の動作を変えるには?

以下に例を出します。

<script type="text/javascript">
function hello(hello){// 引数が1つ
alert(hello + ', World!');
}
function world(hello, world){// 引数が2つ
alert(hello + ', ' + world + '!');
}
hello('Hello');// Hello, World!
world('Hello', 'OKWave');// Hello, OKWave!
</script>

hello() と world() を1つにまとめて、
引数が1つなら、hello() の処理を
引数が2つなら、world() の処理をさせることは出来ないでしょうか?

イメージとしては、以下のようになります。(実際には動作しません)

<script type="text/javascript">
function helloWorld(hello [, world]){// 第二引数は省略しても良い
if(!world){ world = 'World'; }
alert(hello + ', ' + world + '!');
}
helloWorld('Hello');// Hello, World!
helloWorld('Hello', 'OKWave');// Hello, OKWave!
</script>

目的としては、特定のブラウザで動作しないfunctionを定義して様々なブラウザで使う事です。
例えば、forEach() など。
# 実際に活用するためには、prototypeで拡張するデメリットとかいろいろあると思いますが、興味本位が多分にあるのでそこは多めに見てください…。

forEach - MDC
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Array/ForEach

そういう理由ですので、

helloWorld({ hello:'Hello', world:'World' });
helloWorld(['Hello', 'OKWave']);

というようなオブジェクトや配列を渡す方法は使えません…。
何か良い方法はないものでしょうか?

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 48% (239/494)

arguments.length
補足コメント
think49

お礼率 93% (56/60)

一番早くに arguments の回答を下さったbabu_babooさんをベストアンサーにさせていただきます。
steel_grayさんの第二引数を省略してcallできるという回答も参考になりました。
旧システムであれば、次点を差し上げたいぐらいです。

ありがとうございました!
投稿日時:2010/04/21 20:52
お礼コメント
think49

お礼率 93% (56/60)

babu_babooさん、回答早いです…。
あっという間に解決いたしました。
ありがとうございました!

<script type="text/javascript">
function helloWorld(){
 switch(arguments.length){
  case 1:
   alert(arguments[0] + ', World!');
   break;
  case 2:
   alert(arguments[0] + ', ' + arguments[1] + '!');
   break;
  default:
   return false;
 }
}
helloWorld('Hello');// Hello, World!
helloWorld('Hello', 'OKWave');// Hello, OKWave!
</script>

arguments - MDC
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Functions/arguments
JavaScript講座 : 関数のパラメータ
http://www.openspc2.org/JavaScript/kouza2007/function/parameter/index.html
投稿日時:2010/04/21 19:46

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 66% (1052/1578)

argumentsのlengthを参照する
http://www.openspc2.org/JavaScript/kouza2007/function/parameter/index.html

または単純に
function helloWorld(hello , world){~}

call元で第二引数が省略されていれば world はundefinedになるだけですから
f(!world){ world = 'World'; } も成立します。
お礼コメント
think49

お礼率 93% (56/60)

ありがとうございます。

> call元で第二引数が省略されていれば world はundefinedになるだけですから
call元で第二引数を省略したらエラーになると思いこんでいましたが、省略してもcallできるんですね…。
新たな発見でした。

<script type="text/javascript">
function helloWorld(hello , world){// 第二引数は省略しても良い
if(!world){ world = 'World'; }
alert(hello + ', ' + world + '!');
}
helloWorld('Hello');// Hello, World! (第二引数を省略してcallする)
</script>
投稿日時:2010/04/21 20:45
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ