[解決済み] javascriptでオプションのパラメータを扱う
2022-07-18 19:09:46
質問
静的なjavascript関数がありますが、1、2、3のパラメータを取ることができます。
function getData(id, parameters, callback) //parameters (associative array) and callback (function) are optional
与えられたパラメータが未定義かどうかを常にテストできることは知っていますが、渡されたものがパラメータなのかコールバックなのかをどうやって知ることができるでしょうか?
これを行う最良の方法は何でしょうか?
渡される可能性のあるものの例。
1:
getData('offers');
2:
var array = new Array();
array['type']='lalal';
getData('offers',array);
3:
var foo = function (){...}
getData('offers',foo);
4:
getData('offers',array,foo);
どのように解決するのですか?
あなたは 引数 が関数に渡されたことを知ることができ、第二引数が関数であるかどうかを確認することができます。
function getData (id, parameters, callback) {
if (arguments.length == 2) { // if only two arguments were supplied
if (Object.prototype.toString.call(parameters) == "[object Function]") {
callback = parameters;
}
}
//...
}
このように、引数オブジェクトを使うこともできます。
function getData (/*id, parameters, callback*/) {
var id = arguments[0], parameters, callback;
if (arguments.length == 2) { // only two arguments supplied
if (Object.prototype.toString.call(arguments[1]) == "[object Function]") {
callback = arguments[1]; // if is a function, set as 'callback'
} else {
parameters = arguments[1]; // if not a function, set as 'parameters'
}
} else if (arguments.length == 3) { // three arguments supplied
parameters = arguments[1];
callback = arguments[2];
}
//...
}
もし、興味があれば、次のものを見てください。 記事 John Resigによる、JavaScriptのメソッドオーバーローディングをシミュレートするテクニックについてです。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] <noscript> の反対語のHTMLはありますか?
-
[解決済み] jQueryを使用してAJAXリクエストに失敗した場合に再試行する最善の方法は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 変数が関数型かどうかのチェック
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] javascript includes() 大文字小文字を区別しない
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] SVG のテキスト要素の幅を取得する
-
[解決済み] JavaScriptでクエリ文字列が存在するかどうかを確認するには?
-
[解決済み] JavaScriptのswitch文で厳密な比較を仮定するのは安全ですか?
-
[解決済み] Javascript 確認ポップアップの「OK」「キャンセル」の代わりに「はい」「いいえ」ボタン