Ich habe einige Code:Klasse statische Getter, die Klasse in Javascript gibt
//Main class
class Tools {
//Subclass implemented by static getter
static get SUPPORTED_UNITS() {
return class {
//Another one
static get Size() {
return class {
//Some data (constants in my case)
};
}
};
}
}
Ich will, es zu benutzen wie Tools.SUPPORTED_UNITS.Size
und ich möchte einige Daten als Folge davon empfangen. Ich benutze WebStorm zum Schreiben von JavaScript-Code, so dass es mir zeigt, wenn ich es benutze.
ich nicht genau wissen, vielleicht habe ich, nur nicht einige Setup meiner WebStorm getan, aber .. Was muss ich tun, dass ich Konstruktion wie Class.Subclass.SubClassMethod/SubSubclass
verwenden können.
Ich brauche das:
- Es ist keine Methode
- Es
- Es ist unveränderlich (ohne Object.freeze oder so ähnlich) statisch sein - so kann ich nicht meine
Class.Subclass
ändern vonClass.Subclass = foo;
- eingeben sein Es Indizierung von IDE - so habe ich etwas Hilfe von IDE (wie ich
Class.Su
geben und sie legen nahe,Class.Subclass
)
Ist es in ES6 und WebStorm real? Oder muss ich vielleicht ES7 und Babel oder sowas benutzen?
P.S. Dieser Code ist funktioniert, aber ich brauche Anregungen von IDE oder es wird wie eine Hölle sein.
Da der Code funktionsfähig ist und keine ES2016 + -Features verwendet, können Sie sicher sein, dass es sich um ES6 handelt, und das Problem ist spezifisch für die IDE. Der Code erklärt nicht, warum eine Klasse * innerhalb * einer Methode definiert werden sollte, dies führt möglicherweise zu einem XY-Problem. – estus
Verwenden Sie keine Klassen, wenn Sie nur statische Methoden implementieren. Verwenden Sie stattdessen ein normales Objekt: 'const Tools = {SUPPORTED_UNITS: {Size: {}}}'.Sie können Getter auch für Objekte definieren, wenn Sie das brauchen. Ich empfehle, http://eloquentjavascript.net/04_data.html zu lesen. Was Sie implementieren, ist auch keine "Unterklasse". Eine Unterklasse ist normalerweise eine Klasse, die * eine Basisklasse * erweitert. –
@estus Ich denke, dass es eine Unterklassen für die Verwendung von Getter benötigt, die nicht erlauben, Daten im Inneren zu ändern. Vielleicht denke ich falsch (es ist normal, weil ich gerade anfange tief zu gehen). Wie muss ich meine Klasse schreiben, um unveränderliche statische Daten zu verwenden? Beispiel: 'Tools.SUPPORTED_UNITS.Size', wobei ich ** nichts ändern kann (schreibe' Tools.SUPPORTED_UNITS = foo'). Danke –