Introducere în încapsulare în JavaScript

JavaScript este un limbaj de script puternic, orientat pe obiecte, care este capabil să creeze aplicații complexe atât pentru client cât și pentru client server-ul. Cu toate acestea, cu cât este mai mare complexitatea implementării, cu atât este nevoie de un cod mai ușor de întreținut și de flexibil pentru a rezolva situația. Încapsularea, unul dintre principiile programării orientate pe obiecte, este cheia pentru atingerea acestor obiective.

Prin definiție Încapsularea în JavaScript este un proces de legare a datelor cu funcțiile care acționează asupra datelor. Încapsularea ne permite să controlăm și să validăm datele. În JavaScript, variabilele seamănă cu datele.

Încapsulare înseamnă informații care ascund, adică ideea că entitățile interne ale unui obiect nu ar trebui să fie direct goale ca entități publice. Acest lucru va ajuta la restricționarea utilizării neautorizate a variabilelor. În schimb, dacă apelanții doresc să obțină un rezultat definit, ar trebui să utilizeze metoda publică sau entitățile publice din interiorul obiectului pentru a accesa variabilele private ale obiectului.

Funcționarea încapsulării în JavaScript

Să luăm o problemă simplă în care un obiect „angajat” conține două atribute „nume”.

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

Totul arată bine în exemplul de mai sus. Am creat obiectul, am imprimat valoarea atributului și l-am modificat. Dar problema pare să apară atunci când un utilizator încearcă să stabilească o valoare întreagă la atributul name.

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

În ceea ce privește JavaScript, acest lucru este complet legal, deoarece în JavaScript o variabilă poate accepta orice tip care i-a fost dat. Pentru a rectifica acest lucru, trebuie să setăm gama de caractere valabile care pot fi setate la numele atributului obiectului. Aceste validări nu pot funcționa dacă apelantul poate accesa și modifica valoarea acestor date. Soluția simplă pentru aceasta ar fi

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

Exemplul de mai sus aplică validarea, dar are încă unele erori, deoarece apelantul accesează direct numele, el îl poate schimba.

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.

Scopul final aici este ca numele variabilei să nu fie disponibil la nivel global cu obiectul „angajat”. Încapsularea îl ajută. Acest lucru poate fi rezolvat prin conceptele Funcție de aplicare și închideri.

1. Domeniul de funcție

Orice variabilă scrisă în interiorul blocului de cod al funcțiilor rămâne ascunsă din exterior.

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

Prin urmare, dacă mutăm variabila „nume” în funcția „setName”, apelanții nu o vor putea accesa direct. Dar acest lucru nu este ușor de a pune direct variabila „nume” în funcția „setName”, deoarece variabila din interiorul unui bloc de funcții nu poate fi utilizată în afara domeniului său de aplicare, deci numele nu va fi disponibil pentru metoda „getName”. Pentru această închidere vă va ajuta.

2. Închideri

Când două funcții sunt grupate împreună cu referințe la starea lor înconjurătoare sau la mediul lexical este cunoscută sub numele de închidere. În cuvinte simple, închiderea oferă acces la o variabilă locală a unei funcții care trebuie utilizată de o altă funcție din interiorul unei funcții părinte. Aici avem un nume variabil ascuns în funcția setName din lumea exterioară. Dar obiectul interior (myObj), îl poate accesa:

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!

Acum am folosit conceptul de închidere, obiectul interior myObj poate fi accesat de ambele funcții. Dar totuși, există o defecțiune la accesarea obiectului interior. Deasupra am văzut că nu se poate folosi angajatul.getName, nici angajatul.myObj.getName nu poate fi folosit deoarece myObj este, de asemenea, privat la funcție, iar variabilele private nu pot fi accesate în acest fel. Prin urmare, trebuie să returnăm obiectul interior ori de câte ori este apelată funcția anonimă și să o atribuim unei variabile exterioare.

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.

Avantajele încapsulării în JavaScript

Principalul avantaj al utilizării încapsulării în JavaScript este de a oferi securitate datelor. Alte avantaje ale încapsulării includ:

  • Încapsularea protejează un obiect împotriva accesului ilegal.
  • Încapsularea ajută la atingerea unui nivel fără a dezvălui detaliile sale complexe.
  • Acest lucru va reduce erorile umane.
  • Faceți aplicația mai flexibilă și mai ușor de gestionat.
  • Simplifică aplicația.

Concluzie

Încapsularea este instrumentul JavaScript care poate fi utilizat pentru a face operațiunea complexă ușor și ușor de gestionat, făcând aplicația generală sigură și ușor de lucrat.

Articole recomandate

Acesta este un ghid pentru încapsularea în JavaScript. Aici discutăm modul de încapsulare în javascript împreună cu concepte și avantaje. De asemenea, puteți consulta următoarele articole pentru a afla mai multe-

  1. Caracteristici ale JavaScript (Comentarii)
  2. Schiri în JavaScript - Tipuri și metode
  3. Instrumente JavaScript
  4. Pentru buclă în JavaScript (flux de lucru)
  5. Variabile în JavaScript
  6. Tipuri și erori de gestionare în JavaScript
  7. Funcții Regex în Python (Exemplu)
  8. Exemple de comentarii în PHP