Gibt es einen Grund, die klassische Syntax von ES6-Methoden zu schreiben?
class MyClass {
myMethod() {
this.myVariable++;
}
}
Wenn ich benutze myMethod()
Als Rückruf bei einem Ereignis muss ich so etwas schreiben (in JSX):
// Anonymous function.
onClick={() => { this.myMethod(); }}
// Or bind this.
onClick={this.myMethod.bind(this)}
Aber wenn ich Methode als Pfeilfunktion deklariere:
class MyClass {
myMethod = () => {
this.myVariable++;
}
}
als ich nur schreiben kann (in JSX):
onClick={this.myMethod}
Die Funktion, die Sie verwenden, ist nicht Teil von ES6. Es ist das Klassenfelder Vorschlag. Damit können Sie Instanzeigenschaften initialisieren, ohne einen Konstruktor schreiben zu müssen. Dh dein Code:
class MyClass {
myMethod = () => {
this.myVariable++;
}
}
ist genau das gleiche wie
class MyClass {
constructor() {
this.myMethod = () => {
this.myVariable++;
};
}
}
Und das zeigt Ihnen auch, was der Unterschied zwischen a ist normal Klassenmethode und eine Methode, die über ein Klassenfeld erstellt wurde:
- Eine normale Methode wird von allen Instanzen der Klasse gemeinsam genutzt (sie ist im Prototyp definiert).
- Pro Instanz wird eine „Klassenfeldmethode“ angelegt
Also alles die gleichen Gründe wie in Verwendung von ‘Prototyp’ vs. ‘dies’ in JavaScript? gelten, aber kurz gesagt:
- Verwenden Sie “Klassenfeldmethoden”, wenn Sie eine Methode pro Instanz benötigen. Dies ist der Fall bei Ereignishandlern, die auf die aktuelle Instanz zugreifen müssen. Zugriff auf
this
funktioniert auch nur, wenn Sie eine Pfeilfunktion verwenden.
- Verwenden Sie in allen anderen Fällen normale Klassenmethoden.
.
Alles, was ich bekomme, ist ein Syntaxfehler.
– ASDFGorte
26. August 17 um 14:04 Uhr
Ich bin mir nicht sicher, ob es normal funktioniert, aber mit Babel (Webpack) funktioniert es.
– Vesmy
26. August 17 um 14:06 Uhr
Diese Fremden
{ }
sind fehlerhaft.– Spitze
26. August 17 um 14:07 Uhr
Entschuldigung, onClick={…} ist in JSX, kein HTML.
– Vesmy
26. August 17 um 14:08 Uhr
mögliches Duplikat von Wie verwende ich Pfeilfunktionen (öffentliche Klassenfelder) als Klassenmethoden?
– Bergi
29. Oktober 20 um 20:42 Uhr