Uvod u enkapsulaciju u JavaScript-u

JavaScript je čvrst objektni orijentirani skriptni jezik koji može graditi složene aplikacije i za klijenta i za poslužitelj. Međutim, što je veća složenost implementacije, potreban je bolji održivi i fleksibilniji kôd za rješavanje situacije. Enkapsulacija, jedan od principa objektno-orijentiranog programiranja, je ključ za postizanje takvih ciljeva.

Inkapsulacija u JavaScript-u je proces povezivanja podataka s funkcijama koje djeluju na te podatke. Enkapsulacija nam omogućuje kontrolu i potvrđivanje podataka. U JavaScript-u varijable nalikuju podacima.

Inkapsulacija podrazumijeva skrivanje informacija, tj. Ideja da se unutarnji subjekti nekog predmeta ne bi trebali izravno pojaviti kao javni subjekti. To će pomoći ograničiti neovlaštenu upotrebu varijabli. Umjesto toga, ako pozivači žele postići definirani rezultat, za pristup privatnim varijablama objekta trebaju koristiti javnu metodu ili javne subjekte unutar objekta.

Rad inkapsulacije u JavaScript-u

Uzmimo jednostavan problem gdje objekt „zaposlenik“ sadrži dva atributa atributa „name“.

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

U gornjem primjeru sve izgleda u redu. Stvorili smo objekt, ispisali njegovu vrijednost atributa i promijenili ga. No čini se da problem nastaje kada neki korisnik pokuša postaviti atribut ime cijelu vrijednost.

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

Što se tiče JavaScript-a, ovo je potpuno legalno jer u JavaScript-u jedna varijabla može prihvatiti bilo koju vrstu koja joj je dana. Da bismo to ispravili, trebamo postaviti raspon valjanih znakova koji se mogu postaviti na ime atributa objekta. Te provjere ne mogu funkcionirati ako pozivatelj može pristupiti i izmijeniti vrijednost tih podataka. Jednostavno rješenje za to bi bilo

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

Gornji primjer primjenjuje provjeru valjanosti, ali još uvijek ima nekih grešaka kao da pozivatelju izravno pristupi ime, i dalje ga može promijeniti.

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.

Krajnji cilj ovdje je da naziv varijable ne bi trebao biti dostupan globalno s objektom "zaposlenik". Inkapsulacija pomaže u tome. To se može riješiti konceptima Opseg funkcija i zatvaranje.

1. Opseg funkcije

Bilo koja varijabla koja je napisana unutar bloka koda funkcija ostaje skrivena izvana.

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

Dakle, ako promijenimo varijablu "name" u funkciju "setName", pozivaoci joj neće moći izravno pristupiti. No, nije lako izravno staviti varijablu "name" unutar funkcije "setName" jer se varijabla unutar funkcionalnog bloka ne može koristiti izvan njegovog dosega, stoga naziv neće biti dostupan za metodu "getName". Za ovo će vam pomoći Zatvaranje.

2. Zatvaranja

Kad se dvije funkcije povežu zajedno s referencama na njihovo okolno stanje ili se leksičko okruženje naziva zatvaranjem. Jednostavnim riječima, zatvaranje daje pristup lokalnoj varijabli funkcije koju će koristiti druga funkcija unutar roditeljske funkcije. Ovdje imamo naziv varijable koji se skriva unutar funkcije setName iz vanjskog svijeta. Ali unutarnjem objektu (myObj) može pristupiti:

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!

Sada smo koristili koncept zatvaranja, unutarnjem objektu myObj mogu se pristupiti obje funkcije. Ali ipak, postoji greška za pristup unutarnjem objektu. Iznad smo vidjeli uposlenik.getName ne može se koristiti, niti se zaposlenik.myObj.getName ne može koristiti jer je myObj također privatno funkciji, a privatnim varijablama ne može se pristupiti izvana poput ovog. Stoga moramo vratiti unutarnji objekt kad god se poziva anonimna funkcija i dodijeliti je vanjskoj varijabli.

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.

Prednosti enkapsulacije u JavaScript-u

Glavna prednost upotrebe enkapsulacije u JavaScriptu je sigurnost podataka. Ostale prednosti enkapsulacije uključuju:

  • Inkapsulacija štiti objekt od ilegalnog pristupa.
  • Inkapsulacija pomaže postići razinu bez otkrivanja njegovih složenih detalja.
  • To će smanjiti ljudske pogreške.
  • Učinite aplikaciju fleksibilnijom i upravljivijom.
  • Pojednostavljuje aplikaciju.

Zaključak

Inkapsulacija je alat u JavaScriptu koji se može učiniti za složenu operaciju jednostavnom i upravljivom, čineći cjelokupnu aplikaciju sigurnom i lakom za rad.

Preporučeni članci

Ovo je vodič za Encapsulaciju u JavaScript-u. Ovdje smo raspravljali o radu enkapsulacije u javascriptu, zajedno s konceptima i prednostima. Možete pogledati i sljedeće članke da biste saznali više -

  1. Značajke JavaScripta (Komentari)
  2. Nizovi u JavaScript - Vrste i metode
  3. JavaScript alati
  4. Za petlju u JavaScript-u (tijek rada)
  5. Varijable u JavaScript-u
  6. Vrste i rukovanje pogreškama u JavaScript-u
  7. Regex funkcije u Pythonu (primjer)
  8. Primjeri komentara u PHP-u

Kategorija: