Javascript enum in einer enum

8

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 ...

stehen

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.

    
aeq 29.07.2010, 13:17
quelle

5 Antworten

2

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" .

    
Nick Canzoneri 29.07.2010, 13:36
quelle
5

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.

    
TheCloudlessSky 29.07.2010 14:00
quelle
0

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%     
moxn 29.07.2010 13:37
quelle
0

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:

%Vor%

Und da Funktionen auch Objekte sind, können Sie Ihr Verschachtelungsrecht in die Funktion State einfügen:

%Vor%

Und überprüfen Sie seinen Typ:

%Vor%     
casablanca 29.07.2010 14:26
quelle
0
%Vor% %Vor%     
Thomas Eding 29.07.2010 16:27
quelle

Tags und Links