2017-10-26 4 views
4

Was ist der Unterschied zwischen Funktionen, die mit const deklariert wurden, und Funktionen, die ohne let oder const deklariert wurden, und eine Funktion, die sonst in einer ES6-Klasse deklariert wurde?es6 Funktionsdeklaration in React-Klasse

class App extends Component { 

    submitFood =() =>{ 
     // some code 
    } 

Warum funktioniert die obige Arbeit in Ordnung, aber die Erklärung unten gibt einen Fehler:

class App extends Component { 

    const submitFood =() =>{ 
     // some code 
     } 
+1

Weil sie 'member functions' oder' methods' sind und Teil der 'Klasse' sind, die Sie deklarieren. –

+1

Es ist nicht immer klar, wie man Fragen beantwortet, die fragen "Warum ist das keine gültige Syntax". Es ist keine gültige Syntax, weil die Sprache es einfach nicht erlaubt. Oder möchten Sie den Grund für die Entscheidung kennen, diese Syntax nicht zuzulassen? In diesem Fall müssen Sie mit den Leuten sprechen, die diese Entscheidung getroffen haben. –

+0

Sie sind beide ungültig ES6, also würde ich sagen, dass es nicht viel Unterschied ist. – Bergi

Antwort

-2

const submitFood =() =>{ // some code }

ist die Schaffung Funktion (submitFood=() {}) und die Schaffung einer Variablen so übliche Regeln in variablen Hosting blockiert let und const.
so fehlschlagen, da submitFood() nicht definiert ist. (Es wird einen ReferenceError werfen).

2

Zunächst einmal: Keines der von Ihnen angegebenen Beispiele ist gültig ES6. The grammar rules for ES6 classes nur Methodendefinitionen im Klassenkörper erlauben. I.e.

class MyClass { 
    method1() {} 
    method2() {} 
} 

Das erste Beispiel ist jedoch die Verwendung des class fields proposal machen. Dieser Vorschlag erweitert die bestehende Grammatik der Definition der Eigenschaften des Formulars

class MyClass { 
    someProperty = value; 
} 

Diese Zuordnungen werden nicht in Klassendefinition ausgewertet, damit aber zum Zeitpunkt der Instanzierung. Es ist syntaktischen Zucker für Eigenschaften im Konstruktor zuweisen:

class MyClass { 
    constructor() { 
    this.someProperty = value; 
    } 
} 

Ihr zweites Beispiel einfach ungültige Syntax ist, weil es keine Grammatikregeln sind, dass Putting let oder const vor dem Klassenfeld ermöglichen.

Beachten Sie, dass Klassenfelder nicht Variablendeklarationen oder Variablenzuordnungen sind.

Verwandte Themen