Ruby、CoffeeScript、今後の JavaScript バージョンなどの一部の言語では、関数を定義するときに次のようにデフォルトのパラメーターを宣言できます。
// 出力: "最初の文字列" と "2 番目の文字列"
myFunc("最初の文字列");
// 出力: "最初の文字列" と "2 番目の文字列バージョン 2"
myFunc("最初の文字列", "2 番目の文字列バージョン 2");
残念ながら、現在のバージョンのJavaScriptではこの書き方は無効です。では、既存のツールセットを使用してこれを達成するにはどうすればよいでしょうか?
最も簡単な解決策は次のとおりです:
console.log(param1, param2);
}
// 出力: "最初の文字列" と "2 番目の文字列バージョン 2"
myFunc("最初の文字列", "2 番目の文字列バージョン 2");
実際には、省略されたパラメータはアクセス時に常に「未定義」になります。パラメータが 1 つしかない場合、これは良い解決策ですが、複数ある場合はどうなるでしょうか?
複数のパラメータがある場合は、オブジェクトをパラメータとして使用できます。これには、各パラメータに明確な名前があるという利点があります。オブジェクトパラメータを渡す場合、同じ方法でデフォルト値を宣言できます。
var FinalParams = defaultParams;
// paramObject
の各プロパティを反復処理します。
for (paramObject の var キー) {
// 現在のプロパティが継承されていない場合は、続行します
If (paramObject.hasOwnProperty(key)) {
// 現在のプロパティが定義されている場合、
// FinalParams
に追加します
If (paramObject[key] !== 未定義) {
finalParams[キー] = paramObject[キー];
}
}
}
console.log(finalParams.param1,
finalParams.param2,
finalParams.param3);
}
myFunc({param1: "自分の文字列"});
これは少し扱いにくいですが、このメソッドを多くの場所で使用する場合は、jQuery や Underscore の extend メソッドなどの関連メソッドが多くのライブラリに用意されています。
以下では、Underscore の extend メソッドを使用して、上記と同じ結果を実現します。
var FinalParams = _.extend(defaultParams, paramObject);
console.log(finalParams.param1,
finalParams.param2,
finalParams.param3);
}
// 出力:
// 「自分の文字列」と「2 番目の文字列」と「3 番目の文字列」
myFunc({param1: "自分の文字列"});
これは、現在の JavaScript バージョンでデフォルトのパラメータを取得する方法です。
記事内のあらゆる不正確な点についての批判と修正を歓迎します。