2017-02-01 8 views
5

Uczę się React.js i widzę słowo kluczowe super używane dużo w funkcjach konstruktora.Czy ktoś może wyjaśnić słowo kluczowe "super()" w języku JavaScript w wersji ES6 (szczególnie w związku z React)?

Rozumiem, że super umożliwia podklasie dostęp do słowa kluczowego . Jednak nie mogę znaleźć więcej wyjaśnień.

  • Dlaczego nazywając super(), magicznie dać mojej klasie dostęp do this?
  • Dlaczego słowo kluczowe super wiąże this z kontekstem klasy?
  • Kiedy nie mam do czynienia z podklasą, dlaczego nie muszę zadzwonić pod numer super()?
+1

Możesz wyszukiwać słowa kluczowe i wiele innych rzeczy w [** MDN **] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/super) – adeneo

Odpowiedz

2

W rzeczywistości wywołanie super w konstruktorze wywołuje konstruktor klasy nadrzędnej. Możesz mieć dostęp do this niezależnie od tego, czy go używasz, czy nie, ale w kontekście reakcji te właściwości związane z this, takie jak this.props i this.state, są poprawnie skonfigurowane i skonfigurowane w konstruktorze klasy React.Component. Dlatego musisz najpierw zadzwonić super, aby this został poprawnie skonfigurowany.

+0

Dzięki za że. Zamierzam trochę pobawić się przy użyciu "this", aby przetestować, jak super() ustawia, ale to sprawia, że ​​dużo bardziej koncepcyjny sens. – thatDubstepSound

5

Przepraszamy za zdjęcie w języku japońskim, ale wygląda na łatwe do zrozumienia.

Podczas korzystania z funkcji super w funkcjach członków klasy, należy również użyć słowa kluczowego extends. Podczas wywoływania super jak super(args) w klasie rozszerzającej, wywołuje to konstruktor klasy rozszerzonej. Możesz także wywołać inne funkcje składowe klasy rozszerzonej przy pomocy super.methods(args), a nie super(args).

extends and super (Od https://liginc.co.jp/266587)

UPDATE

FYI: What's the difference between "super()" and "super(props)" in React when using es6 classes? Ta dyskusja wyjaśnia dobrze o tym, jak reagować w super składnik wpływa tym kontekście ograniczenie. Dobrze czytać.

+1

Nie można użyć 'super (arg)' w metodach, musi to być 'super.methods (arg)'. – Bergi

+0

To prawda, zaktualizuję obrazek. – IzumiSy

Powiązane problemy