Ich habe die folgende "Enum" in Javascript, um den Status meiner Anwendung anzuzeigen:
%Vor% Nun möchte ich, dass jeder Staat einen "Unterstaat" hat. So könnte beispielsweise STATE_B
in STATE_B1
oder STATE_B2
...
Was wäre der beste Weg, dies zu strukturieren? Würde ich irgendwie eine "enum" innerhalb der State
"enum" verschachteln? Danke
Wenn es einen besseren Weg gibt, dies zusammen zu strukturieren (außer enums), bin ich ganz Ohr. Grundsätzlich muss ich in der Lage sein, den Status meiner Anwendung zu setzen und zu überprüfen, und jedem Zustand kann (aber nicht notwendig) ein Unterzustand zugeordnet sein, der eingestellt und überprüft werden kann. Noch besser, wenn die Lösung es mir erlaubt, mehr als eine Ebene der Verschachtelung tief zu gehen.
Was du machst, ist nicht wirklich enums. Sie verwenden native JavaScript-Objekte und behandeln sie einfach wie Enums, was vollkommen akzeptabel ist, wenn Sie ein aufzählungsähnliches Objekt in Javascript haben wollen.
Um Ihre Frage zu beantworten, können Sie Objekte vollständig verschachteln:
%Vor%Sie verwenden dann nur die Punktnotation, um diese Werte wie
festzulegen State.State_B.SUBSTATE_2 = "active"
.
Sie können eine Art Bit-Feld verwenden, wenn Sie möchten:
%Vor%Also sind die ersten 8 Bits für die Einstellung des Unterzustands reserviert. Sie können dies natürlich erhöhen, solange der Root-Status und der Sub-State in eine 32-Bit-Ganzzahl passen. Wenn Sie eine Erklärung brauchen, warum / wie das funktioniert (bitweise Operatoren), lassen Sie es mich wissen.
Ich denke, du möchtest etwas schreiben wie
%Vor%Sie könnten einfach eine andere Ebene in Ihrem State-Objekt wie
definieren %Vor%Bearbeiten : Basierend auf den Kommentaren zu Ihrer Frage könnte dies ein anderer Ansatz sein.
%Vor%Jetzt können Sie alles mit
aufrufen %Vor% Da JavaScript das Überladen von Operatoren nicht unterstützt, können Sie die Gleichheit von Unterzuständen nicht direkt mit dem Operator ==
testen. Am nächsten kommt man mit dem Operator instanceof
, um zu prüfen, ob ein Zustand von einem bestimmten Typ ist, zum Beispiel:
Und da Funktionen auch Objekte sind, können Sie Ihr Verschachtelungsrecht in die Funktion State
einfügen:
Und überprüfen Sie seinen Typ:
%Vor%Tags und Links javascript enums