Úvod do zapouzdření v JavaScriptu

JavaScript je robustní objektově orientovaný skriptovací jazyk, který je schopen vytvářet komplexní aplikace jak na klientovi, tak na serveru server. Čím vyšší je však složitost provádění, tím lepší je udržovatelný a flexibilní kód pro řešení situace. Klíčem k dosažení těchto cílů je zapouzdření, jeden z principů objektově orientovaného programování.

Podle definice Zapouzdření do JavaScriptu je proces vazby dat s funkcemi, které na data působí. Zapouzdření nám umožňuje kontrolovat a validovat data. V JavaScriptu se proměnné podobají datům.

Zapouzdření znamená skrytí informací, tj. Myšlenku, že vnitřní entity objektu by neměly být přímo holé jako veřejné entity. Pomůže to omezit neoprávněné použití proměnných. Místo toho, pokud volající chtějí dosáhnout definovaného výsledku, měli by použít veřejnou metodu nebo veřejné entity uvnitř objektu pro přístup k soukromým proměnným objektu.

Práce zapouzdření v JavaScriptu

Vezměme si jednoduchý problém, kdy „zaměstnanecký“ objekt obsahuje dva atributy atribut „name“.

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

Ve výše uvedeném příkladu je vše v pořádku. Objekt jsme vytvořili, vytiskli jeho atributovou hodnotu a upravili. Zdá se však, že problém nastane, když se některý uživatel pokusí nastavit atribut name na celé číslo.

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

Pokud jde o JavaScript, je to zcela legální, protože v JavaScriptu může proměnná akceptovat jakýkoli typ, který jí je dán. Abychom to napravili, musíme nastavit rozsah platných znaků, které lze nastavit na název atributu objektu. Tato ověření nemohou fungovat, pokud volající má přístup k těmto údajům a může je změnit. Jednoduché řešení by bylo

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

Výše uvedený příklad aplikuje ověření, ale stále má některé chyby, jako by volající přistupoval ke jménu přímo, může jej přesto změnit.

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 cílem je, aby název proměnné neměl být globálně dostupný s objektem „zaměstnanec“. Zapouzdření to pomáhá. To lze vyřešit koncepty Function Scope a Closures.

1. Rozsah působnosti

Jakákoli proměnná zapsaná uvnitř kódového bloku funkcí zůstává zvenku skrytá.

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

Pokud tedy přesuneme proměnnou „name“ do funkce „setName“, volající k ní nebudou mít přímý přístup. Není však snadné přímo vložit proměnnou „name“ do funkce „setName“, protože proměnnou uvnitř funkčního bloku nelze použít mimo její rozsah, proto by název pro metodu „getName“ nebyl k dispozici. K tomuto uzavření pomůže.

2. Uzávěry

Když jsou spojeny dvě funkce spolu s odkazy na jejich okolní stav nebo je lexikální prostředí známé jako uzávěr. Zjednodušeně řečeno, uzavření umožňuje přístup k místní proměnné funkce, kterou má použít jiná funkce uvnitř nadřazené funkce. Zde máme skrytý název proměnné uvnitř funkce setName z vnějšího světa. K vnitřnímu objektu (myObj) je ale pří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!

Nyní jsme použili koncept uzavření, vnitřní objekt myObj je přístupný oběma funkcemi. Stále však existuje chyba v přístupu k vnitřnímu objektu. Výše jsme viděli zaměstnanec.getName nelze použít, ani zaměstnance.myObj.getName nelze použít, protože myObj je pro tuto funkci také soukromý a soukromé proměnné nemohou být takto zpřístupněny. Proto musíme vnitřní objekt vrátit vždy, když je vyvolána anonymní funkce, a přiřadit ji k vnější proměnné.

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 zapouzdření v JavaScriptu

Hlavní výhodou použití zapouzdření v JavaScriptu je zabezpečení dat. Mezi další výhody zapouzdření patří:

  • Zapouzdření chrání objekt před nezákonným přístupem.
  • Zapouzdření pomáhá dosáhnout úrovně bez odhalení jeho složitých detailů.
  • Tím se sníží lidské chyby.
  • Zvyšte flexibilitu a spravovatelnost aplikace.
  • Zjednodušuje aplikaci.

Závěr

Zapouzdření je nástroj v JavaScriptu, který lze použít k tomu, aby složitá operace byla snadná a spravovatelná díky celkové bezpečnosti aplikace a snadné práci.

Doporučené články

Toto je průvodce zapouzdřením do JavaScriptu. Zde diskutujeme fungování zapouzdření v javascriptu spolu s koncepty a výhodami. Další informace naleznete také v následujících článcích

  1. Vlastnosti JavaScriptu (Komentáře)
  2. Pole v JavaScriptu - typy a metody
  3. Nástroje JavaScript
  4. Pro smyčku v JavaScriptu (pracovní postup)
  5. Proměnné v JavaScriptu
  6. Typy a manipulace s chybami v JavaScriptu
  7. Funkce Regex v Pythonu (příklad)
  8. Příklady komentářů v PHP

Kategorie: