dポイントプレゼントキャンペーン実施中!

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

以下に例を出します。

<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 …

そういう理由ですので、

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

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

A 回答 (2件)

arguments.length

この回答への補足

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

ありがとうございました!

補足日時:2010/04/21 20:52
    • good
    • 0
この回答へのお礼

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 …
JavaScript講座 : 関数のパラメータ
http://www.openspc2.org/JavaScript/kouza2007/fun …

お礼日時:2010/04/21 19:46

argumentsのlengthを参照する


http://www.openspc2.org/JavaScript/kouza2007/fun …

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

call元で第二引数が省略されていれば world はundefinedになるだけですから
f(!world){ world = 'World'; } も成立します。
    • good
    • 1
この回答へのお礼

ありがとうございます。

> 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が見つからない時は、教えて!gooで質問しましょう!