Ruby、Coffeescript、今後のJavaScriptバージョンなど、一部の言語は、関数を定義するときにデフォルトのパラメーターを宣言できます。
コードコピーは次のとおりです。
function myfunc(param1、param2 = "second string"){
console.log(param1、param2);
}
//出力:「最初の文字列」と「2番目の文字列」
myfunc( "First String");
//出力:「最初の文字列」と「2番目の文字列バージョン2」
myfunc( "First String"、 "2番目の文字列バージョン2");
残念ながら、現在のJavaScriptバージョンでは、この記述は無効です。それでは、既存のツールセットを使用して、この方法で実装するために何ができますか?
最も簡単な解決策は次のようなものです。
コードコピーは次のとおりです。
関数myfunc(param1、param2){
if(param2 === undefined){
param2 = "second string";
}
console.log(param1、param2);
}
//出力:「最初の文字列」と「2番目の文字列バージョン2」
myfunc( "First String"、 "2番目の文字列バージョン2");
実際、省略されたパラメーターは、アクセス時に常に「未定義」になります。パラメーターが1つしかない場合、これは良いソリューションです。その時点で複数のパラメーターがあった場合はどうなりますか?
複数のパラメーターがある場合は、オブジェクトをパラメーターとして使用できます。これには、各パラメーターに明確な命名があるという利点があります。オブジェクトパラメーターを渡すと、同じ方法でデフォルト値を宣言できます。
コードコピーは次のとおりです。
function myfunc(paramobject){
var defaultparams = {
PARAM1:「最初の文字列」、
PARAM2:「2番目の文字列」、
PARAM3:「3番目の文字列」
};
var finalparams = defaultparams;
// paramobjectの各プロパティを反復します
for(paramobjectのvarキー){
//現在のプロパティが継承されていない場合は、進行しました
if(paramobject.hasownproperty(key)){
//現在のプロパティが定義されている場合、
// finalparamsに追加します
if(paramobject [key]!== undefined){
finalparams [key] = paramobject [key];
}
}
}
console.log(finalparams.param1、
finalparams.param2、
finalparams.param3);
}
myfunc({param1: "私自身の文字列"});
これは少し不器用です。この方法をよく使用する場合は、カプセル化関数を書くことができます。幸いなことに、多くのライブラリには、JQueryやUnderscoreの拡張方法など、関連する方法があります。
以下は、アンダースコアの拡張方法を使用して、上記の同じ結果を達成します。
コードコピーは次のとおりです。
function myfunc(paramobject){
var defaultparams = {
PARAM1:「最初の文字列」、
PARAM2:「2番目の文字列」、
PARAM3:「3番目の文字列」
};
var finalparams = _.extend(defaultparams、paramobject);
console.log(finalparams.param1、
finalparams.param2、
finalparams.param3);
}
//出力:
//「私自身の文字列」と「2番目の文字列」と「3番目の文字列」
myfunc({param1: "私自身の文字列"});
これは、現在のJavaScriptバージョンでデフォルトのパラメーターを取得する方法です。
記事の不適切な側面の批判と修正は大歓迎です。