2017-02-23 11 views
6

に空のオブジェクトに割り当てられた中括弧オブジェクトは、コードされJS関数宣言:ここで、パラメータ宣言

export function createConnect({ 
    connectHOC = connectAdvanced, 
    mapStateToPropsFactories = defaultMapStateToPropsFactories, 
    mapDispatchToPropsFactories = defaultMapDispatchToPropsFactories, 
    mergePropsFactories = defaultMergePropsFactories, 
    selectorFactory = defaultSelectorFactory 
} = {}) {...} 

何{connectHOC = connectAdvanced ...} = {}関数パラメータ宣言内意味しますか?

は私が

= {} 

は、関数パラメータのデフォルト値を意味するかもしれないことを知っているが、以前の括弧内のコードの使用何ですか?

+2

Iは完全にはわからない、まだ、しかし最初の部分は、( '{connectHOC = ......... = defaultSelectorFactory}')オブジェクトではない、それはいくつかの変数宣言を持つブロックであります。オブジェクトは等号ではなくコロンを使用します。 –

+1

これは、パラメータのデフォルト値と構造解除の組み合わせです。驚いたことに、私たちは今のところSOの両者をカバーしている質問は表示されていません。 –

+1

[これは閉じる](http:// stackoverflow。com/questions/26578167/es6-object-destructuring-default-parameters)を参照してください。 [これも](http://stackoverflow.com/questions/34275971/how-to-destructure-option-argument-with-all-default-values-in-es6)。彼らはどちらもここで何が起こっているのかを説明しますが、OPの観点からは、「この構文とは何か」のアプローチではなく、デフォルト値を非構造化パラメータに割り当てることを知っています。 –

答えて

5

これはES2015の構文です。関数の宣言では、Destructuring assignmentがデフォルト値と結合されています。

これは、オブジェクトを使用して、基本的な分割代入です:

var {a, b} = {a: "foo", b: "bar"}; 
 
console.log(a); // "foo" 
 
console.log(b); // "bar"

あなたは左側にデフォルト値を追加することができます。

var {a = "foo", b = "bar"} = {}; 
 
console.log(a); // "foo" 
 
console.log(b); // "bar"

関数を宣言するときに、引数に名前を付けるとき、あなたはそれが同じになる構造化代入var、およびオブジェクトでは使用しないでください:もちろん、あなたが定義することができ、

function test({a = "foo", b = "bar"}){ 
 
    console.log(a + b); 
 
} 
 
test({}); // "foobar" 
 
test({b: "boo"}); // "fooboo"

そして、あなたの関数が引数を取る必要はありません。

function test({a = "foo", b = "bar"} = {}){ 
 
    console.log(a + b); 
 
} 
 
test(); // "foobar"

+0

さらに良い例があります。 – msanford

3

これは単に、非構造化を使用してデフォルトパラメータを実行する方法です。あなたはデフォルトとして提案したように最後のビットが必要です。

の例のようにdestructuring assignmentを使用する、次のことを考えてみます。

デフォルトが欠落している、この1、対

function withDefault({parameter=something} = {}) { 
 
console.log(parameter) 
 
} 
 

 
let something = 1; 
 
withDefault();

、およびエラーがスローされます。

function withoutDefault({parameter=something}) { 
 
console.log(parameter) 
 
} 
 

 
let something = 1; 
 
withoutDefault(); 
 
// It needs to be called as withoutDefault({}), withoutDefault(1) or 
 
// with some value, since the function signature doesn't define a default 
 
// in this case.