1. ホーム
  2. javascript

[解決済み] 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のメソッドオーバーローディングをシミュレートするテクニックについてです。