私は次のような関数を定義しました:
function call_api(url, callback, query = {}, body = {})
本文を指定してクエリをスキップできる構文を期待しました。
call_api('/api/clients/new', function(x){console.log(x)}, body={1:2})
しかし、私はこの回避策を使用する必要があります:
call_api('/api/clients/new', function(x){console.log(x)}, {}, {1:2})
body=
、それはquery
パラメータとして表示されます。私はWebpackでBabelを使用しています。 ChromeコンソールとWebpackソースで構文を試しました。
そのような構文はES6でサポートされていますか?それはどのように機能しますか?
これを回避するには、オブジェクトを渡し、オブジェクトの分解を使用することをお勧めします。
function callApi({url, callback, query = {}, body = {}})
そしてそれを次のように呼び出します:
callAPI({url: "/api/..", callback: (x => console.log(x)), body: {a:2}})
これにより、必要な構文に類似した構文が得られます。
名前付き引数は、C#やPythonそれらをサポートする)のような他の言語とは異なり、JavaScriptでは考慮され、拒否されました。 これに関する最近の議論 から言語メーリングリスト。
this site に示されているように、デフォルトはデフォルト値を必要とするパラメーター(オプションパラメーターなど)のみであり、「スキップ」パラメーターではありません。
あなたがやろうとしているのは
// function definition
function hi(a,b,c,d)
// function call
hi(a,b,d)
ES6は、デフォルト値に関係なく、「d」が定義されたcであるとまだ考えています。
いいえ、ES6にはそのような構文はありません。
呼び出しで割り当てるパラメーターを指定することはできません。
call_api('/api/clients/new', function(x){console.log(x)}, body={1:2})
関数の外でbodyという名前の変数を設定し、その値をクエリパラメータのスポットに渡すことと同じです。
あなたが望むものを達成するために解体を使用することもできます。
function call_api(url, callback, {query = {}, body = {}} = {})
その後、あなたの電話でこれを行います
call_api('/api/clients/new', function(x){console.log(x)}, {body:{1:2}})
デフォルトのパラメーター値が使用されるのは、パラメーターが未定義の場合のみであることから、パラメーターを「スキップ」してデフォルトに戻す唯一の方法は、その場所にundefined
を送信することです。
_call_api('/api/clients/new', function(x){console.log(x)}, undefined, {1:2})
_
例: Babel REPL
この場合、関数内のquery
の値は_{}
_(またはデフォルトに設定したもの)になります。
これは、空の値を渡してデフォルトのパラメーター値を使用する場合の Visual Basicの動作 に似ています。 (例:sub name(argument 1, , , argument 4)
)
それ以外の場合、名前付きパラメーターのサポートが必要な場合、最善の妥協策は@Benjamin Gruenbaumによって提供される答えです。
更新:あなたは見つけるかもしれません この記事はarguments
キーワードを使用したオプションを提供します 、またはさらに良いことに、 ES6 _...rest
_パラメータコレクションを反復 Javascriptで オーバーロードされた関数 をシミュレートできます。