Warum werden ES6-Klassen nicht gehisst?
Eigentlich sie sind gehisst (die variable Bindung in den gesamten Umfang verfügbar ist) wie let
and const
are - sie sind nur nicht initialisiert.
Es wäre sinnvoll, die Definition hissen
Nein. Es ist nie eine gute Idee, eine Klasse vor seiner Definition zu verwenden. Betrachten Sie das Beispiel
var foo = new Bar(); // this appears to work
console.log(foo.x) // but doesn't
function Bar(x) {
this.x = x || Bar.defaultX;
}
Bar.defaultX = 0;
und vergleichen Sie es mit
var foo = new Bar(); // ReferenceError
console.log(foo.x);
class Bar {
constructor (x = Bar.defaultX) {
this.x = x;
}
}
Bar.defaultX = 0;
, die einen Fehler wirft, wie man erwarten würde. Dies ist ein Problem für statische Eigenschaften, Prototyp Mixins, Dekoratoren und alles. Außerdem ist es sehr wichtig für Unterklassen, die komplett in ES5 brach, wenn Sie eine Klasse mit seinem nicht angepassten Prototyp verwendet haben, aber nun einen Fehler ausgibt, wenn eine extend
Ed-Klasse noch nicht initialisiert ist.
ES6-Klassen * sind nicht * nur syntaktischer Zucker, obwohl sie * meist * syntaktischer Zucker sind. –
Das Hochziehen war eine fast endlose Quelle von Missverständnissen und Verwirrung. Alle neuen Deklarationskonstrukte ('let',' const', 'class'), die in ES6 hinzugefügt wurden, sind nicht angehängt (nun, sie sind * halb-hiist *). Abgesehen von einem Zitat von Eich oder ähnlich, werden Sie keine Antwort bekommen, die nicht effektiv Spekulation ist. –
@mmm: MDN wird von der Community bearbeitet und manchmal falsch. Nicht oft, nicht annähernd so oft wie, sagen wir, diese andere Seite, aber manchmal. Siehe [diese Antwort] (http://stackoverflow.com/a/31222689/157247) für wie sie beide gehisst und nicht gehisst werden. –