logo

Enumy v JavaScripte

Enumy v JavaScripte predstavujú spôsob, ako definovať množinu pomenovaných konštánt, ktoré sa často používajú na reprezentáciu súboru súvisiacich hodnôt. Hoci JavaScript nemá vstavanú podporu pre enumy, podobnú funkčnosť je možné dosiahnuť pomocou objektov alebo premenných const na zlepšenie čitateľnosti kódu a udržiavateľnosti.

In JavaScript , Enumerácie alebo Enumy sa používajú na reprezentáciu pevnej množiny pomenovaných hodnôt. Enumy však nie sú natívne pre JavaScript, takže sa zvyčajne implementujú pomocou objektov alebo zmrazených polí.

Ak chcete zabezpečiť nemennosť Enumov v JavaScripte, môžete postupovať podľa týchto pokynov:



Metóda Object.freeze():

Jedným zo spôsobov, ako vytvoriť objekt podobný Enum, je definovanie obyčajného objektu JavaScript s konštantnými hodnotami vlastností a následným použitím Object.freeze() aby sa zabránilo akejkoľvek ďalšej úprave. Tým sa zabezpečí, že objekt a jeho vlastnosti nemožno meniť ani mutovať. Môžete použiť Object.freeze() spôsob, ako zabrániť akýmkoľvek zmenám objektu. Po zmrazení objektu nemôžete pridávať, upravovať ani odstraňovať žiadne z jeho vlastností. Túto metódu môžete použiť na vytvorenie nemenného objektu, ktorý predstavuje váš Enum.

Syntax:

Object.freeze()>

Metóda Object.defineProperty():

Metódu Object.defineProperty() môžete použiť na definovanie vlastností, ktoré nemožno zmeniť, pridať ani odstrániť. Túto metódu môžete použiť na vytvorenie vlastnosti len na čítanie pre každú hodnotu Enum. Metódu Object.defineProperty() môžete použiť na definovanie vlastností, ktoré nemožno zmeniť, pridať ani odstrániť. Túto metódu môžete použiť na vytvorenie vlastnosti len na čítanie pre každú hodnotu Enum.

Použite TypeScript : TypeScript je nadmnožina JavaScriptu, ktorá zahŕňa podporu pre Enums. Pomocou TypeScript môžete definovať Enumy spôsobom, ktorý zaručí ich nemennosť.

Príklad 1: V tomto príklade vytvoríme objekt Enum s názvom DaysOfWeek pomocou Object.freeze(). Metóda Object.freeze() robí objekt nemenným, takže nemôžeme pridávať, upravovať ani odstraňovať 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ýkon:

0>

Symbol ES6:

Ďalším prístupom k vytvoreniu Enum v JavaScripte je použitie symbolov ES6. Symboly sú jedinečné identifikátory, ktoré sa nedajú duplikovať a môžu sa použiť na definovanie konštantných hodnôt, ktoré sú zaručene jedinečné a nemenné.

Príklad: V tomto príklade definujeme enum s názvom myEnum pomocou Object.freeze(), aby sme zabránili akýmkoľvek úpravám objektu. Používame Symbol() na vytváranie jedinečných symbolov pre každú hodnotu enum.

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ýkon:

Symbol(foo) Symbol(foo) undefined>

Použitie uzáveru:

Na vytvorenie Enum môžete použiť aj uzáver. Uzáver je funkcia, ktorá má prístup k premenným vo svojom vonkajšom rozsahu funkcií. Vytvorením vnútornej funkcie, ktorá vracia hodnotu, môžeme urobiť premennú v rozsahu vonkajšej funkcie iba na čítanie.

Príklad: V tomto príklade používame uzáver na vytvorenie objektu s názvom DaysOfWeek. Objekt dní je definovaný vo vonkajšom rozsahu funkcie a nie je prístupný mimo funkcie. Vnútorná funkcia get vracia hodnotu vlastnosti s daným názvom z objektu days. Keďže objekt dní nie je priamo prístupný, nie je možné ho upravovať mimo uzávierky.

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ýkon:

0>