logo

Enumi v JavaScriptu

Enumi v JavaScriptu so način za definiranje nabora poimenovanih konstant, ki se pogosto uporabljajo za predstavitev zbirke povezanih vrednosti. Medtem ko JavaScript nima vgrajene podpore za enume, je podobno funkcionalnost mogoče doseči z uporabo objektov ali spremenljivk const za izboljšanje berljivosti in vzdrževanja kode.

noter JavaScript , Enumeracije ali enumi se uporabljajo za predstavitev fiksnega niza poimenovanih vrednosti. Vendar enumi niso izvorni za JavaScript, zato so običajno implementirani z uporabo predmetov ali zamrznjenih nizov.

Če želite zagotoviti nespremenljivost enumov v JavaScriptu, lahko sledite tem smernicam:



Metoda Object.freeze():

Eden od načinov za ustvarjanje predmeta, podobnega Enumu, je definiranje navadnega predmeta JavaScript s stalnimi vrednostmi lastnosti in nato uporaba Object.freeze() da preprečite kakršne koli nadaljnje spremembe. To bo zagotovilo, da predmeta in njegovih lastnosti ni mogoče spremeniti ali mutirati. Lahko uporabite Object.freeze() način za preprečevanje kakršnih koli sprememb predmeta. Ko je predmet zamrznjen, ne morete dodati, spremeniti ali izbrisati nobene njegove lastnosti. To metodo lahko uporabite za ustvarjanje nespremenljivega predmeta, ki predstavlja vaš Enum.

Sintaksa:

Object.freeze()>

Metoda Object.defineProperty():

Z metodo Object.defineProperty() lahko definirate lastnosti, ki jih ni mogoče spremeniti, dodati ali izbrisati. S to metodo lahko ustvarite lastnost samo za branje za vsako vrednost Enum. Z metodo Object.defineProperty() lahko definirate lastnosti, ki jih ni mogoče spremeniti, dodati ali izbrisati. S to metodo lahko ustvarite lastnost samo za branje za vsako vrednost Enum.

Uporaba TypeScript : TypeScript je nadnabor JavaScripta, ki vključuje podporo za Enum. Z uporabo TypeScripta lahko definirate enume na način, ki zagotavlja njihovo nespremenljivost.

Primer 1: V tem primeru ustvarimo objekt Enum z imenom DaysOfWeek z uporabo Object.freeze(). Metoda Object.freeze() naredi objekt nespremenljiv, zato ne moremo dodati, spremeniti ali izbrisati lastnosti iz predmeta.

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);>

Izhod:

0>

Simbol ES6:

Drug pristop k ustvarjanju enuma v JavaScriptu je uporaba simbolov ES6. Simboli so edinstveni identifikatorji, ki jih ni mogoče podvojiti in jih je mogoče uporabiti za definiranje stalnih vrednosti, ki so zajamčeno edinstvene in nespremenljive.

primer: V tem primeru definiramo enum z imenom myEnum z uporabo Object.freeze(), da preprečimo kakršne koli spremembe predmeta. Uporabljamo Symbol() za ustvarjanje edinstvenih simbolov za vsako enum vrednost.

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>

Izhod:

Symbol(foo) Symbol(foo) undefined>

Uporaba zaprtja:

Za ustvarjanje Enuma lahko uporabite tudi zaprtje. Zapiranje je funkcija, ki ima dostop do spremenljivk v svojem zunanjem obsegu funkcije. Z ustvarjanjem notranje funkcije, ki vrne vrednost, lahko spremenljivko v zunanjem obsegu funkcije naredimo samo za branje.

primer: V tem primeru uporabimo zaprtje za ustvarjanje predmeta z imenom DaysOfWeek. Objekt dni je definiran v zunanjem obsegu funkcije in ni dostopen zunaj funkcije. Notranja funkcija get vrne vrednost lastnosti z danim imenom iz predmeta days. Ker objekt dni ni neposredno dostopen, ga ni mogoče spreminjati zunaj zaprtja.

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>

Izhod:

0>