Mitgliedsvariablen in ES6-Klassen
Gibt es eine Möglichkeit, die Verwendung der ECMAScript6 class
notation zu erklären, entweder durch eine statische Klassen-variable oder ein default-Wert für eine Instanz-variable? Ohne class
was ich im Sinn habe würde so geschrieben werden, als
function MyClass(arg) { if(arg) this.arg = arg; }
MyClass.classVariable = 42;
MyClass.prototype.arg = "no arg specified";
Die offensichtlich am meisten ES6-wie die Schreibweise meiner Meinung nach hätte
class MyClass {
constructor(arg) { if(arg) this.arg = arg; }
static let classVariable = 42;
let arg = "no arg specified";
}
Aber das funktioniert nicht, da nach die aktuelle Spezifikation Entwurf die nur Produktionen der ClassElement sind statische und Instanz-Methoden und Semikolons alle von selbst. OK, man kann mit einem paar von get-und Set-Methoden zum erreichen ähnlicher Semantik zu dem, was ich dargelegt, aber ich denke mal zu einer schweren performance-Einbußen und mit wirklich bizarren syntax.
Gibt es einige Entwürfe, die nahelegt, einschließlich der Variablen, die in der class
notation, die eine oder andere Weise? Wenn ja, was war die vorgeschlagene syntax, wo wurde es veröffentlicht, wo wurde es erörtert, wie hat sich die Diskussion gehen, und was ist der aktuelle Stand der Dinge an dieser front? So wie es da steht, ist diese Frage nicht beantwortet werden kann, wenn keine solche Sache diskutiert worden, bevor, auf jeder Ebene, aber ich halte das für unwahrscheinlich.
Ein wenig hintergrund: ich bin derzeit liebäugelt mit dem Google closure compiler durchführen von erweiterten Zusammenstellung, Verwendung von ES6 als Eingabe. Damit das funktioniert, brauche ich einen Ort, um meine Art von Anmerkungen für member-Variablen, und ich verwendet, um Sie über syntax, wie /** @type {string} */MyClass.prototype.arg;
was ist eine semantische no-op in ECMAScript, aber den Typ von Informationen zu den closure compiler einfach und schön. Ich habe noch keine gefunden, die eine ähnlich nette Art und Weise, dies zu tun mit class
konstruieren. Aber wenn Sie Pflege zu Adresse dieser Aspekt, das wäre ein Kommentar. Die Frage oben ist über attributdeklarationen, die mehr sind als no-ops, also das ist, was die Antwort hier soll diskutiert werden.
InformationsquelleAutor der Frage MvG | 2015-02-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
ES6 wird mit ziemlicher Sicherheit nicht decken syntax für die Definition von Klassenvariablen. Nur Methoden und Getter/setter kann definiert werden mit Hilfe der Klasse syntax. Dies bedeutet, dass Sie noch zu gehen haben die
MyClass.classVariable = 42;
route für Klassenvariablen.Wenn Sie wollen einfach nur zum initialisieren einer Klasse mit einigen Standardwerten, es ist eine reiche neue syntax set für Funktion argument und destructuring Standardwerte, die Sie verwenden können. Geben Sie ein einfaches Beispiel:
InformationsquelleAutor der Antwort lyschoening
Habe ich noch nicht benutzt, Google Closure Compiler, aber mit Babel können Sie erklären
static
(bezieht sich auf eineclass
) Variablen, wie beschrieben,hier. Der Artikel konzentriert sich auf Reagieren, weil der nutzen vonstatic
Mitglieder für die Reaktion, sondern Sie ist anwendbar auf ES6class
es im Allgemeinen.Syntax in der Nähe Ihres vorgeschlagenen syntax:
Beachten Sie, dass Sie müssen hinzufügen
'es7.classProperties'
zu Ihrem.babelrc
für diese zu kompilieren. Finden Sie die Babel 5.0.0 release notes für mehr info.Ich weiß nicht, ob es einen Weg gibt, zu erklären
static
alsconst
.InformationsquelleAutor der Antwort ericsoco
Es ist zwar nicht Teil des ES6 spec, das sieht aus wie es bald kommen und wird bereits unterstützt von Babel und einige andere.
Hier ist die Skillung:
https://github.com/jeffmo/es-class-fields-and-static-properties
Sowie eine vollständige Liste aller Vorschläge und deren status:
https://github.com/tc39/ecma262
InformationsquelleAutor der Antwort Clayton Gulick