Wprowadzenie do enkapsulacji w JavaScript

JavaScript to solidny obiektowy język skryptowy, który jest w stanie budować złożone aplikacje zarówno na kliencie, jak i na serwer. Jednak im większa złożoność wdrożenia, tym łatwiejszy w utrzymaniu i elastyczny kod jest potrzebny do rozwiązania tej sytuacji. Kapsułkowanie, jedna z zasad programowania obiektowego jest kluczem do osiągnięcia takich celów.

Z definicji Encapsulation in JavaScript to proces wiązania danych z funkcjami, które działają na dane. Hermetyzacja pozwala nam kontrolować i weryfikować dane. W JavaScript zmienne przypominają dane.

Hermetyzacja oznacza ukrywanie informacji, tj. Ideę, że wewnętrzne jednostki obiektu nie powinny być bezpośrednio odsłonięte jako jednostki publiczne. Pomoże to ograniczyć nieuprawnione użycie zmiennych. Zamiast tego, jeśli wywołujący chcą osiągnąć określony wynik, powinni użyć metody publicznej lub encji publicznych wewnątrz obiektu, aby uzyskać dostęp do prywatnych zmiennych obiektu.

Działanie enkapsulacji w JavaScript

Weźmy prosty problem, w którym obiekt „pracownika” zawiera dwa atrybuty atrybutu „nazwa”.

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

Wszystko wygląda dobrze w powyższym przykładzie. Stworzyliśmy obiekt, wydrukowaliśmy jego wartość atrybutu i zmodyfikowaliśmy go. Ale problem pojawia się, gdy jakiś użytkownik próbuje ustawić wartość całkowitą dla atrybutu name.

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

Jeśli chodzi o JavaScript, jest to całkowicie legalne, ponieważ w JavaScript zmienna może akceptować dowolny podany jej typ. Aby to naprawić, musimy ustawić zakres prawidłowych znaków, które można ustawić na nazwę atrybutu obiektu. Te walidacje nie mogą działać, jeśli osoba dzwoniąca może uzyskać dostęp do tych danych i modyfikować je. Byłoby to proste rozwiązanie

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

Powyższy przykład stosuje sprawdzanie poprawności, ale nadal ma pewne błędy, ponieważ jeśli dzwoniący uzyskuje bezpośredni dostęp do nazwy, nadal może ją zmienić.

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.

Ostatecznym celem tutaj jest, aby nazwa zmiennej nie była dostępna globalnie dla obiektu „pracownik”. Kapsułkowanie pomaga. Można to rozwiązać za pomocą koncepcji Zakres działania i Zamknięcia.

1. Zakres funkcji

Każda zmienna, która jest zapisana w bloku kodu funkcji, pozostaje ukryta z zewnątrz.

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

Dlatego jeśli przeniesiemy zmienną „name” wewnątrz funkcji „setName”, wówczas wywołujący nie będą mogli uzyskać do niej bezpośredniego dostępu. Ale nie jest łatwo umieścić zmienną „name” wewnątrz funkcji „setName”, ponieważ zmiennej wewnątrz bloku funkcyjnego nie można użyć poza jej zakresem, dlatego nazwa nie byłaby dostępna dla metody „getName”. Do tego Zamknięcie pomoże.

2. Zamknięcia

Gdy dwie funkcje są połączone razem z odniesieniami do ich stanu otaczającego lub środowisko leksykalne jest znane jako zamknięcie. Krótko mówiąc, zamknięcie daje dostęp do zmiennej lokalnej funkcji, która ma być używana przez inną funkcję wewnątrz funkcji nadrzędnej. Tutaj mamy nazwę zmiennej ukrywającą się w funkcji setName przed światem zewnętrznym. Ale wewnętrzny obiekt (myObj) może uzyskać do niego dostęp:

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 wykorzystaliśmy koncepcję zamknięcia, do wewnętrznego obiektu myObj można uzyskać dostęp za pomocą obu funkcji. Ale nadal jest błąd dostępu do wewnętrznego obiektu. Powyżej widzieliśmy, że pracownik.getName nie może być użyty, żaden pracownik.myObj.getName nie może być użyty, ponieważ myObj jest również prywatny dla funkcji i nie można uzyskać dostępu do zmiennych prywatnych na zewnątrz w ten sposób. Dlatego musimy zwrócić obiekt wewnętrzny za każdym razem, gdy wywoływana jest funkcja anonimowa i przypisać ją do zmiennej zewnętrznej.

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.

Zalety enkapsulacji w JavaScript

Główną zaletą korzystania z enkapsulacji w JavaScript jest zapewnienie bezpieczeństwa danych. Inne zalety kapsułkowania obejmują:

  • Hermetyzacja chroni obiekt przed nielegalnym dostępem.
  • Hermetyzacja pomaga osiągnąć poziom bez ujawniania jego skomplikowanych szczegółów.
  • Zmniejszy to liczbę błędów ludzkich.
  • Uczyń aplikację bardziej elastyczną i łatwą w zarządzaniu.
  • Upraszcza aplikację.

Wniosek

Hermetyzacja to narzędzie w języku JavaScript, którego można użyć, aby skomplikowana operacja była łatwa i możliwa do zarządzania, dzięki czemu cała aplikacja jest bezpieczna i łatwa w obsłudze.

Polecane artykuły

Jest to przewodnik po enkapsulacji w JavaScript. Tutaj omawiamy działanie enkapsulacji w javascript wraz z pojęciami i zaletami. Możesz także przejrzeć następujące artykuły, aby dowiedzieć się więcej-

  1. Funkcje JavaScript (komentarze)
  2. Tablice w JavaScript - typy i metody
  3. Narzędzia JavaScript
  4. Dla pętli w JavaScript (przepływ pracy)
  5. Zmienne w JavaScript
  6. Typy i obsługa błędów w JavaScript
  7. Funkcje wyrażenia regularnego w języku Python (przykład)
  8. Przykłady komentarzy w PHP