Úvod do zapuzdrenia v JavaScripte

JavaScript je robustný objektovo orientovaný skriptovací jazyk, ktorý dokáže vytvárať komplexné aplikácie na strane klienta aj klienta server. Čím je však komplexnosť implementácie vyššia, tým je na vyriešenie situácie potrebný lepšie udržiavateľný a flexibilný kódex. Kľúčom k dosiahnutiu týchto cieľov je zapuzdrenie, jedna zo zásad objektovo orientovaného programovania.

Podľa definície Zapuzdrenie do JavaScriptu je proces väzby údajov s funkciami, ktoré na údaje pôsobia. Zapuzdrenie nám umožňuje kontrolovať a overovať údaje. V JavaScripte sa premenné podobajú údajom.

Zapuzdrenie znamená skrytie informácií, tj myšlienka, že vnútorné subjekty objektu by nemali byť priamo verejné. Pomôže to obmedziť neoprávnené použitie premenných. Namiesto toho, ak volajúci chcú dosiahnuť definovaný výsledok, mali by použiť verejnú metódu alebo verejné entity vo vnútri objektu na prístup k súkromným premenným objektu.

Fungovanie zapuzdrenia v JavaScripte

Urobme jednoduchý problém, keď objekt „zamestnanec“ obsahuje dva atribúty „name“.

var employee = (
name : "Aditya Chaturvedi",
);
alert(employee.name); // Aditya Chaturvedi
employee.name = "Rahul Khanna";
alert(employee.name); // Rahul Khanna

Vo vyššie uvedenom príklade je všetko v poriadku. Vytvorili sme objekt, vytlačili jeho hodnotu atribútu a upravili ho. Zdá sa však, že problém nastane, keď sa niektorý používateľ pokúsi nastaviť na atribút atribútu celé číslo.

employee.name = "Amit Trivedi";
alert(employee.name); // Amit Trivedi

Pokiaľ ide o JavaScript, je to úplne legálne, pretože v JavaScripte môže premenná akceptovať akýkoľvek daný typ. Aby sme to napravili, musíme nastaviť rozsah platných znakov, ktoré možno nastaviť na názov atribútu objektu. Tieto overenia nemôžu fungovať, ak volajúci má prístup k týmto údajom a môže ich zmeniť. Jednoduchým riešením by to bolo

var employee = (
name : "Aditya Chaturvedi",
setName : function (value) (
var exp = new RegExp(/\d+/);
if( exp.test(value) ) (
alert("Invalid Name");
)
else (
this.name = value;
)
),
"getName" : function() (
return this.name;
)
);
alert( employee.getName() ); // Aditya Chaturvedi
employee.setName( "Rahul Khanna" );
alert( employee.getName() ); // Rahul Khanna
employee.setName( 42 ); // Invalid Name
alert( employee.getName() ); // Rahul Khanna

Vyššie uvedený príklad platí pri validácii, ale stále má určité chyby, ako keby volajúci pristupoval k názvu priamo, stále ho môže zmeniť.

employee.setName( 42 ); // Invalid Name; Here name won't be changed.
employee.name = 42; // No validation happens and the name is changed
alert( employee.getName() ); // 42 is printed.

Konečným cieľom je, že názov premennej by nemal byť globálne dostupný s objektom „zamestnanec“. Zapuzdrenie to pomáha. To možno vyriešiť prostredníctvom konceptov Rozsah funkcií a Uzávery.

1. Rozsah pôsobnosti

Akákoľvek premenná, ktorá je napísaná vnútri kódového bloku funkcií, zostáva zvonku skrytá.

function fnScope()
(
var fnVar = "Hi!";
alert( fnVar ) // "Hi!";
)
alert( fnVar ) // error; fnVar is not accessible outside the function.

Preto ak presunieme premennú „name“ do funkcie „setName“, volajúci nebudú mať priamy prístup k nej. Nie je však ľahké vložiť premennú „name“ priamo do funkcie „setName“, pretože premennú vnútri funkčného bloku nemožno použiť mimo jej rozsahu, preto by pre metódu „getName“ nebolo dostupné meno. Pri tomto uzavretí pomôžete.

2. Uzávery

Keď sa spoja dve funkcie spolu s odkazmi na ich okolitý stav alebo lexikálne prostredie sa nazýva uzáver. Jednoducho povedané, uzavretie umožňuje prístup k lokálnej premennej funkcie, ktorú má použiť iná funkcia vo vnútri rodičovskej funkcie. Tu máme premenný názov, ktorý sa skrýva vo vnútri funkcie setName pred vonkajším svetom. Ale vnútorný objekt (myObj) má k nemu prístup:

var employee = function () (
var name = "Aditya Chaturvedi";
var exp = new RegExp(/\d+/);
var myObj = (
setName : function (value) (
if( exp.test(value) ) (
alert("invalid name");
)
else (
name = value; // The object has access to "name"
)
),
getName : function () (
return name; // The object has access to "name"
)
); // End of the Object
);
employee.getName(); // doesn't work!

Teraz sme použili koncept uzavretia, k vnútornému objektu myObj sa dá dostať oboma funkciami. Stále však existuje chyba v prístupe k vnútornému objektu. Vyššie, ako sme videli, nie je možné použiť názov zamestnanca.getName, nemožno použiť ani zamestnanca.myObj.getName, pretože funkcia myObj je pre funkciu tiež súkromná a mimo tohto nie je možné získať prístup k súkromným premenným. Preto vždy, keď sa volá anonymná funkcia, musíme vrátiť vnútorný objekt a priradiť ho vonkajšej premennej.

var employee = function () (
var name = "Aditya Chaturvedi";
var exp = new RegExp(/\d+/);
return (
setName : function (value) (
if( exp.test(value) ) (
alert("Invalid Name");
)
else (
name = value;
)
),
getName : function () (
return name;
)
); // end of the return
)(); // Note this '()' means we're calling the function
// and assigning the returned value to the variable employee
alert(employee.getName()); // Aditya Chaturvedi
employee.setName( "Rahul Khanna" );
alert(employee.getName()); // Rahul Khanna
employee.setName( 42 ); // Invalid Name; the name does'nt changes.
employee.name = 42; // Doesn't affect the private fullName variable.
alert(employee.getName()); // Rahul Khanna is printed again.

Výhody zapuzdrenia v JavaScripte

Hlavnou výhodou použitia zapuzdrenia v JavaScripte je zabezpečenie údajov. Medzi ďalšie výhody zapuzdrenia patrí:

  • Zapuzdrenie chráni objekt pred nezákonným prístupom.
  • Zapuzdrenie pomáha dosiahnuť úroveň bez odhalenia jej zložitých detailov.
  • Tým sa znížia ľudské chyby.
  • Urobte aplikáciu flexibilnejšou a spravovateľnejšou.
  • Zjednodušuje aplikáciu.

záver

Zapuzdrenie je nástroj v JavaScripte, ktorý sa dá použiť na zjednodušenie a spravovanie zložitých operácií pomocou zabezpečenia bezpečnej a ľahkej práce celej aplikácie.

Odporúčané články

Toto je sprievodca zapuzdrením do JavaScriptu. Tu diskutujeme fungovanie zapuzdrenia v javascripte spolu s koncepciami a výhodami. Viac informácií nájdete aj v nasledujúcich článkoch

  1. Vlastnosti JavaScriptu (Komentáre)
  2. Polia v JavaScripte - typy a metódy
  3. Nástroje JavaScript
  4. Pre slučku v jazyku JavaScript (pracovný postup)
  5. Premenné v JavaScripte
  6. Typy a manipulácia s chybami v JavaScripte
  7. Funkcie regulárnych výrazov v Pythone (príklad)
  8. Príklady komentárov v PHP

Kategórie: