2017-08-02 4 views
1

Das folgende Muster wird häufig beim Erstellen von Polymer 2.0 ES6-Webkomponenten verwendet.Wann Konstruktor und Super in Polymer 2.0 verwenden?

constructor() { 
    super(); 
} 

Here the documentation describes calling the super(); function when defining an element.

However here in the Shop App wird das Muster nur 3 mal gefolgt, in den folgenden Elementen: Shop-app.html, Shop-Ripple-container.html, Shop-Tabs-overlay.html.

Wann müssen wir super() anrufen? Wann muss dieser Anruf innerhalb der constructor()-Funktion sein? Und was sind die Konsequenzen, wenn man super() nicht wie im Fall the Shop app erscheint?

Bearbeiten: Ein Benutzer (@ 4castle) hat diese Frage vorgeschlagen might be a duplicate of this question. Ich stimme dem nicht zu. Diese Frage beschäftigt sich mit Polymer, während sich die andere mit React beschäftigt. Die andere Frage fragt nach Argumenten, die an die super()-Funktion übergeben werden. Diese Frage möchte wissen, was passiert, wenn super() nicht angerufen wird und wo der beste Ruf ist (d. H. Innerhalb constructor() oder nicht).

+0

Mögliches Duplikat von [was macht super() mit irgendwelchen Argumenten?] (Https://stackoverflow.com/questions/39822941/what-does-super-do-with-any-arguments) – 4castle

+0

'super() 'ist erforderlich, wenn eine Klasse eine andere Klasse 'erweitert'. Andernfalls wird ein 'ReferenceError' ausgelöst, wenn Sie versuchen, auf' this' zuzugreifen, ohne zuerst 'super()' aufzurufen. – 4castle

+0

@ 4castle: Ich habe basierend auf deinem Kommentar und der anderen Frage, auf die du hingewiesen hast, hinzugefügt und geantwortet. Ich habe auch die Frage bearbeitet, um zu erklären, warum ich denke, dass es anders ist. Bitte lassen Sie mich wissen, wenn Sie denken, ich bin auf dem richtigen Weg oder nicht, wenn es Ihnen nichts ausmacht. – Mowzer

Antwort

2

Wann müssen wir super() anrufen?

super() ruft den Konstruktor der geordneten Klasse des Elements (Elternklasse). Wenn die Definition eines Elements eine Klasse definiert, die eine andere Klasse erweitert und super() nicht explizit aufgerufen wird, ruft das Element standardmäßig den Konstruktor der Superklasse auf.

Wann muss dieser Anruf innerhalb der constructor()-Funktion sein?

die richtige Stelle super() zu nennen ist im Innern des constructor() Methode des Elements.

Und was sind die Konsequenzen von super() wie im Fall der Shop-App nicht aufrufen?

In dem Fall, wo

class MyElement extends Polymer.Element {...} 

wie im Fall des Shop-App - die Polymer.Element Konstruktor standardmäßig aufgerufen, wenn super() nicht explizit genannt wird.

1

In der Tat ist es auch ratsam, die folgenden bekommen den vollen Nutzen aus Ihrem Super (Eltern) aufzurufen:

ready() { 
    super.ready(); 
} 

dass die Ready-Funktion in Element aufrufen, wenn Ihre Komponente bereit ist.