
引数の数によって関数の動作を変えるには?
以下に例を出します。
<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']);
というようなオブジェクトや配列を渡す方法は使えません…。
何か良い方法はないものでしょうか?
No.1ベストアンサー
- 回答日時:
arguments.length
この回答への補足
一番早くに arguments の回答を下さったbabu_babooさんをベストアンサーにさせていただきます。
steel_grayさんの第二引数を省略してcallできるという回答も参考になりました。
旧システムであれば、次点を差し上げたいぐらいです。
ありがとうございました!
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 …
No.2
- 回答日時:
argumentsのlengthを参照する
http://www.openspc2.org/JavaScript/kouza2007/fun …
または単純に
function helloWorld(hello , world){~}
call元で第二引数が省略されていれば world はundefinedになるだけですから
f(!world){ world = 'World'; } も成立します。
ありがとうございます。
> 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>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby プログラミング 3 2023/06/09 14:30
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- JavaScript React と Electron でデスクトップアプリを開発する環境について 1 2023/02/08 11:16
- 英語 "Hello" の語源は何でしょうか?中国語の「好」Hǎo ではないでしょうか? 2 2022/04/01 10:23
- JavaScript ifreamをリロードしたい 1 2022/05/03 16:15
- CM ANAのCMのナレーションがどなたなのか知りたいです。 1 2023/01/18 16:54
- Java マイクラでPythonのプログラミングができません 3 2023/05/28 07:15
- C言語・C++・C# C言語 少しの疑問 4 2022/11/08 02:48
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- 英語 Hello and please don't speak so please てどういう意味なんです 2 2022/06/07 22:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptでtableの該当行を削...
-
リンクにマウスポインタをおく...
-
showModalDialogで開いた画面か...
-
Youtube APIを使ったスプリクト...
-
Actionscriptの習得について
-
jQueryプラグインをスマホに対...
-
document.writeの書き方
-
「script」は台本という意味で...
-
JavaScript関数呼出し元の要素...
-
ブラウザの「戻る」ページ遷移...
-
マウスオーバー時の下線表示に...
-
JavaScript ランダムリンク+自...
-
引数の数によって関数の動作を...
-
<a href="#" …>の意味を教えて...
-
外部リンクはブラウザに依存する?
-
ブロックされるのかされないのか?
-
ホームページの一部の表示をラ...
-
外部ファイルでBODYのonloadイ...
-
日替わりメッセージの表示
-
オブジェクトを指定してくださ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vbscriptで自分自身のウィンド...
-
JavaScriptからVBScriptの呼び...
-
datepickerで日付の値を取得したい
-
Cygwinでログをのこす方法
-
ウインドウの後ろに隠れている...
-
undefinedが表示されてしまう
-
ブラウザの「戻る」ボタンを押...
-
ASPで取得した情報をscriptタグ...
-
毎回、ページ読み込み時に1回...
-
PrintScreenキーを無効にしたい
-
onbeforeunload時のwindow.open...
-
iPhone Safariの戻るボタンの挙動
-
確認ダイアログで「キャンセル...
-
<aタグで変数に文字を代入
-
location.reload() について
-
VBscriptでVisualBasicのような...
-
「関数が定義されていない」と...
-
ジャバスクリプトの改行をなく...
-
scriptタグ
-
マウスオーバー時の下線表示に...
おすすめ情報