Výčty v JavaScriptu představují způsob, jak definovat sadu pojmenovaných konstant, které se často používají k reprezentaci kolekce souvisejících hodnot. Přestože JavaScript nemá vestavěnou podporu pro výčty, podobné funkce lze dosáhnout pomocí objektů nebo proměnných const, aby se zlepšila čitelnost kódu a jeho udržovatelnost.
v JavaScript , Výčty nebo Výčty se používají k reprezentaci pevné sady pojmenovaných hodnot. Výčty však nejsou nativní pro JavaScript, takže jsou obvykle implementovány pomocí objektů nebo zmrazených polí.
Chcete-li zajistit neměnnost enumů v JavaScriptu, můžete postupovat podle těchto pokynů:
Metoda Object.freeze():
Jedním ze způsobů, jak vytvořit objekt podobný Enum, je definovat prostý objekt JavaScript s konstantními hodnotami vlastností a poté použít Object.freeze() aby nedošlo k další úpravě. Tím zajistíte, že objekt a jeho vlastnosti nelze měnit nebo mutovat. Můžete použít Object.freeze() způsob, jak zabránit jakýmkoli změnám objektu. Jakmile je objekt zmrazen, nemůžete přidávat, upravovat ani odstraňovat žádné z jeho vlastností. Tuto metodu můžete použít k vytvoření neměnného objektu, který představuje váš Enum.
Syntax:
Object.freeze()>
Metoda Object.defineProperty():
Pomocí metody Object.defineProperty() můžete definovat vlastnosti, které nelze změnit, přidat ani odstranit. Tuto metodu můžete použít k vytvoření vlastnosti pouze pro čtení pro každou hodnotu Enum. Pomocí metody Object.defineProperty() můžete definovat vlastnosti, které nelze změnit, přidat ani odstranit. Tuto metodu můžete použít k vytvoření vlastnosti pouze pro čtení pro každou hodnotu Enum.
Použití TypeScript : TypeScript je nadmnožina JavaScriptu, která zahrnuje podporu pro Enums. Pomocí TypeScript můžete definovat Enum způsobem, který zaručuje jejich neměnnost.
Příklad 1: V tomto příkladu vytvoříme objekt Enum nazvaný DaysOfWeek pomocí Object.freeze(). Metoda Object.freeze() činí objekt neměnným, takže nemůžeme přidávat, upravovat ani odstraňovat vlastnosti objektu.
Javascript const DaysOfWeek = Object.freeze({ SUNDAY: 0, MONDAY: 1, TUESDAY: 2, WEDNESDAY: 3, THURSDAY: 4, FRIDAY: 5, SATURDAY: 6 }); // Try to modify the enum // This will not change the Sunday variable DaysOfWeek.SUNDAY = 7; console.log(DaysOfWeek.SUNDAY);> Výstup:
0>
Symbol ES6:
Dalším přístupem k vytvoření výčtu v JavaScriptu je použití symbolů ES6. Symboly jsou jedinečné identifikátory, které nelze duplikovat a lze je použít k definování konstantních hodnot, které jsou zaručeně jedinečné a neměnné.
Příklad: V tomto příkladu definujeme výčet nazvaný myEnum pomocí Object.freeze(), abychom zabránili jakýmkoliv úpravám objektu. K vytvoření jedinečných symbolů pro každou hodnotu výčtu používáme Symbol().
Javascript const myEnum = Object.freeze({ FOO: Symbol('foo'), BAR: Symbol('bar'), BAZ: Symbol('baz') }); console.log(myEnum.FOO); // Symbol(foo) // Attempting to modify the enum // values will have no effect myEnum.FOO = Symbol('newFoo'); console.log(myEnum.FOO); // Symbol(foo) // Adding a new property to the enum // object will also have no effect myEnum.QUX = Symbol('qux'); console.log(myEnum.QUX); // undefined> Výstup:
Symbol(foo) Symbol(foo) undefined>
Použití uzávěru:
K vytvoření Enum můžete také použít uzávěr. Uzávěr je funkce, která má přístup k proměnným ve svém vnějším funkčním rozsahu. Vytvořením vnitřní funkce, která vrací hodnotu, můžeme změnit proměnnou v rozsahu vnější funkce pouze pro čtení.
Příklad: V tomto příkladu používáme uzávěr k vytvoření objektu s názvem DaysOfWeek. Objekt days je definován ve vnějším rozsahu funkce a není přístupný zvenčí funkce. Vnitřní funkce get vrací hodnotu vlastnosti s daným názvem z objektu days. Vzhledem k tomu, že objekt dnů není přímo přístupný, nelze jej upravovat zvenčí uzavírky.
Javascript const DaysOfWeek = (function () { const days = { SUNDAY: 0, MONDAY: 1, TUESDAY: 2, WEDNESDAY: 3, THURSDAY: 4, FRIDAY: 5, SATURDAY: 6 }; return { get: function (name) { return days[name]; } }; })(); // Try to modify the enum // This will not have any effect DaysOfWeek.SUNDAY = 7; console.log(DaysOfWeek.get('SUNDAY')); // Output: 0> Výstup:
0>