2017-01-22 2 views
0

ES6パラメータオブジェクトの構造解除を使用すると、特定のプロパティの存在を要求することができ、default valuesを指定することもできます。 Dr. Axel Rauschmayerは、Six nifty ES6 tricks articleにおいて、パラメータのデフォルト値が実際に使用された場合にのみ評価されると述べています。パラメータオブジェクト必要な値と空のオブジェクトでの破棄

次の例では、私は理解していないものについてのより多くのコンテキストを提供します:ajax最初の引数関数の

function ajax({ 
    type = requireParameter("type"), 
    url = requireParameter("url"), 
    data = requireParameter("data"), 
    success = requireParameter("success"), 
    error = requireParameter("error"), 
    isAsync = requireParameter("isAsync") 
    } = {}) { 
    console.log(JSON.stringify({ 
     type, 
     url, 
     data, 
     success, 
     error, 
     isAsync 
    }, null, 2)); 
}; 

function requireParameter(name) { 
    throw new Error (`Missing parameter "${name}"`); 
} 

try { 
    ajax({ 
    type: "get", 
    url: "http://my.api.io", 
    data: {}, 
    success:() => {}, 
    error:() => {}, 
    isAsync: true 
    }); 
} catch (e) { 
    console.warn(e.message); 
} 

持つ{...} = {}またはちょうど{...}は同じ動作をします。だから私が2つのオプションのうちの1つをテストすると、{...} = {}ロジックが何をするのかを結論づけることはできません。

私はここでの質問は次のとおりです。

はなぜajax関数の第一引数に空のオブジェクトに等しくなるようにオブジェクトが必要なのでしょうか?

+1

を場合、 '{...} = {}は'あなたの関数のパラメータで、単にデフォルト値を設定します渡された引数は未定義です。 – Phillip

+0

はい、それはなぜ必要なのですか? '{...} = {}'や '{...}'だけには同じ出力があるので、 –

+1

これを行うと想像してください: 'ajax(undefined)'。 destructureは定義されていないので、全体の型チェックは無駄です。だから、最初の引数のデフォルト値を空のオブジェクトにすると、それは非構造化することができます:) – Phillip

答えて

1

特定の例では、パラメータがないときに例外をスローすることになるため、破棄されたオブジェクトを空のオブジェクトにデフォルト設定する必要はありません。それは引数が指定されていないときのためにそうような性質だとあなたは、オブジェクトをデフォルトの可能性:

function ajax({ 
 
    type = requireParameter("type"), 
 
    url = requireParameter("url"), 
 
    data = requireParameter("data"), 
 
    success = requireParameter("success"), 
 
    error = requireParameter("error"), 
 
    isAsync = requireParameter("isAsync") 
 
} = { 
 
    type: "get", 
 
    url: "http://my.api.io", 
 
    data: {}, 
 
    success:() => {}, 
 
    error:() => {}, 
 
    isAsync: true 
 
    }) { 
 
    console.log(JSON.stringify({ 
 
     type, 
 
     url, 
 
     data, 
 
     success, 
 
     error, 
 
     isAsync 
 
    }, null, 2)); 
 
}; 
 

 
function requireParameter(name) { 
 
    throw new Error (`Missing parameter "${name}"`); 
 
} 
 

 
try { 
 
    ajax(/* Don't provide anything and use the default */); 
 
} catch (e) { 
 
    console.warn(e.message); 
 
}

+0

しかし、いつそのような場合が必要なのですか? –

+1

機能の使い方によって異なります。あなたはそれが必要な議論になりたいですか?その場合は、引数にデフォルトを使用せず、既に持っている 'requireParameter'構造体を使用してください。それ以外の場合は、適切なデフォルト値を使用してください。 –

+0

これは、必要な値のメカニックによるパラメータオブジェクトの構造解除を理解するための単なる例です。 –

関連する問題