Co robią nawiasy klamrowe wewnątrz list parametrów funkcji w es6?


Odpowiedzi:


118

Jest to destrukturyzacja , ale zawarta w parametrach. Odpowiednik bez destrukturyzacji to:

const func = o => {
    var param1 = o.param1;
    var param2 = o.param2;
    //do stuff
}

12
Aby upewnić się, że dobrze rozumiem, zasadniczo oznacza to, że obiekt zawierający te właściwości zostałby przekazany do funkcji, a następnie w ramach funkcji można uzyskać dostęp do właściwości automatycznie, używając ich nazwy?
Nathan

7
@Nathan Tak, zobacz konkretną sekcję o niszczeniu obiektów . Należy jednak pamiętać, że aktualizacje zmiennych nie zaktualizują oryginalnych właściwości obiektu - to nie jest tak, że tworzy odniesienie do oryginalnej wartości.
James Thorpe


11

To przekazuje obiekt jako własność.

Jest to w zasadzie skrót od

let param1 = someObject.param1
let param2 = someObject.param2

Inny sposób użycia tej techniki bez parametrów jest następujący, zastanówmy się przez chwilę, że someObject zawiera te właściwości.

let {param1, param2} = someObject;

3

Jest to zadanie polegające na niszczeniu obiektów. Podobnie jak ja, mogłeś uznać to za zaskakujące, ponieważ składnia destrukturyzacji obiektów ES6 wygląda jak, ale NIE zachowuje się jak konstrukcja dosłowna obiektu.

Obsługuje bardzo zwięzłą formę, na którą się natknąłeś, a także zmienia nazwy pól i domyślnych argumentów:

Zasadniczo jest to {oldkeyname: newkeyname = defaultvalue, ...}. „:” NIE jest separatorem klucz / wartość; „=” jest.

Pewnym skutkiem tej decyzji dotyczącej projektowania języka jest to, że być może będziesz musiał zrobić takie rzeczy

; ({a, b} = jakiś_obiekt);

Dodatkowe pareny zapobiegają analizowaniu lewego nawiasu klamrowego jako bloku, a wiodący średnik zapobiega analizowaniu paren jako wywołania funkcji do funkcji z poprzedniego wiersza.

Aby uzyskać więcej informacji, zobacz: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destruifying_assignment

Uwaga, kluczowe błędy podczas przypisywania destrukcji obiektów NIE są zgłaszane; po prostu otrzymujesz wartości „niezdefiniowane”, niezależnie od tego, czy jest to błąd klucza, czy inny błąd, który został po cichu propagowany jako „nieokreślony”.

> var {rsienstr: foo, q: bar} = {p:1, q:undefined};
undefined
> foo
undefined
> bar
undefined
> 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.