2017-02-23 9 views
6

Oto kod,JS deklaracja funkcji: kręcone obiekt klamra przypisany pustego obiektu w deklaracji parametru

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

Co {connectHOC = connectAdvanced ...} = {} oznacza, wewnątrz deklaracji parametru funkcja?

wiem, że

= {} 

może oznaczać domyślną wartość parametru funkcji, ale co jest użycie kodu wewnątrz poprzednich szelki?

+2

Nie jestem do końca pewien, ale, ale pierwsza część ('{connectHOC = ......... = defaultSelectorFactory}') nie jest obiektem, jest to blok z kilku deklaracji zmiennych . Obiekt używałby dwukropków, a nie znaków równych. –

+1

Jest to kombinacja wartości domyślnych dla parametrów i destrukturyzacji. Zaskoczeni nie wydajemy się, aby pytanie dotyczyło obu tych osób w tym samym czasie na SO, albo to, albo moje google zawodzi mnie tym razem. –

+1

[To jest blisko] (http: // stackoverflow.com/questions/26578167/es6-object-destructuring-default-parameters), ale nie do końca dupe. [Również to] (http://stackoverflow.com/questions/34275971/how-to-destructure-option-argument-with-all-default-values-ines6). Oboje wyjaśniają, co tu się dzieje, ale z punktu widzenia PO wiedząc, że chcą przypisać wartości domyślne do zniszczonych parametrów, a nie "jaka jest ta składnia". –

Odpowiedz

5

To jest składnia ES2015. Twoja deklaracja funkcji łączy wartość Destructuring assignment z wartością domyślną.

Jest to podstawowe zadanie rozpad użyciu obiektu:

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

Można dodać wartości domyślnych po lewej stronie:

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

Kiedy wymienić argumenty podczas deklarowania funkcji, aby nie używać var iz demontażu struktury obiektu będzie to samo:

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

I, oczywiście, można zdefiniować wartość domyślna, dzięki czemu twoja funkcja nie musi przyjmować żadnych argumentów.

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

+0

Ładne dodatkowe przykłady. – msanford

3

To po prostu sposób wykonywania parametrów domyślnych za pomocą destrukturyzacji. Potrzebujesz ostatniego bitu, jaki zasugerowałeś jako domyślny.

Rozważmy następujące dane, które jak np używa destructuring assignment:

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

 
let something = 1; 
 
withDefault();

versus ten jeden, który jest brakującym domyślne i który zgłasza błąd:

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.

Powiązane problemy