Увод у енкапсулацију у ЈаваСцрипт-у

ЈаваСцрипт је чврст објектни оријентисан скриптни језик који може да гради сложене апликације и на клијенту и на сервер. Међутим, што је већа сложеност у имплементацији, потребан је бољи одрживи и флексибилнији код за решавање ситуације. Енкапсулација, један од принципа објектно оријентисаног програмирања, је кључ за постизање таквих циљева.

Инкапсулација у ЈаваСцрипт-у је процес повезивања података са функцијама које делују на податке. Инкапсулација нам омогућава контролу и потврђивање података. У ЈаваСцрипт-у променљиве подсећају на податке.

Инкапсулација подразумева скривање информација, односно идеју да унутрашњи субјекти објекта не би смели бити директно рођени као јавни субјекти. Ово ће вам помоћи да ограничите неовлашћену употребу променљивих. Умјесто тога, ако позивачи желе постићи дефинирани резултат, требали би користити јавну методу или јавне субјекте унутар објекта за приступ приватним варијаблама објекта.

Рад Енцапсулације у ЈаваСцрипт-у

Узмимо један једноставан проблем где предмет „запослени“ садржи два атрибута атрибута „наме“.

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

У горњем примеру све изгледа у реду. Створили смо објект, исписали његову вредност атрибута и модификовали га. Но, чини се да проблем настаје када неки корисник покуша поставити атрибут наме целог броја.

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

Што се тиче ЈаваСцрипт-а, ово је потпуно легално јер у ЈаваСцрипт-у променљива може да прихвати било коју врсту која му је дата. Да бисмо то исправили, морамо поставити распон валидних знакова који се могу поставити на име атрибута објекта. Ове провјере не могу функционирати ако позивалац може приступити и промијенити вриједност ових података. Једноставно решење за то би било

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

Горњи пример примењује валидацију, али још увек има неких грешака као да позивалац директно приступи имену, и даље га може променити.

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.

Крајњи циљ овдје је да назив варијабле не би требао бити доступан глобално са објектом „запослени“. Инкапсулација то помаже. То се може решити концептима Опсег функција и затварање.

1. Обим функције

Било која варијабла која је написана унутар блока кода функција остаје скривена извана.

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

Стога ако променимо променљиву „наме“ унутар функције „сетНаме“, позиваоци неће моћи да јој директно приступе. Али, није лако директно променити „наме“ у функцију „сетНаме“, јер се променљива унутар функционалног блока не може користити изван свог опсега, стога име неће бити доступно за методу „гетНаме“. За ово ће вам помоћи Затварање.

2. Затварање

Када се две функције повезују заједно са референцама на њихово окружење или је лексичко окружење познато као затварање. Једноставним речима, затварање даје приступ локалној варијабли функције коју ће користити друга функција унутар родитељске функције. Овде имамо назив променљиве који се крије унутар функције сетНаме из спољног света. Али унутрашњи објект (миОбј), може му приступити:

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!

Сада смо користили концепт затварања, унутрашњем објекту миОбј могу приступити обе функције. Али ипак, постоји грешка у приступу унутрашњем објекту. Изнад смо видјели упосленик.гетНаме не може се користити, нити се запосленик.миОбј.гетНаме не може користити јер је миОбј такође приватан функцији, а приватним варијаблама не може се приступити извана попут овог. Стога морамо вратити унутрашњи објект кад год се анонимна функција позива и додијелити је вањској варијабли.

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.

Предности Енцапсулације у ЈаваСцрипт-у

Главна предност употребе енкапсулације у ЈаваСцрипт-у је пружање сигурности подацима. Остале предности енкапсулације укључују:

  • Инкапсулација штити објект од илегалног приступа.
  • Инкапсулација помаже да се постигне ниво без откривања његових сложених детаља.
  • То ће смањити људске грешке.
  • Учините апликацију флексибилнијом и управљивијом.
  • Поједностављује апликацију.

Закључак

Инкапсулација је алат у ЈаваСцрипт-у који се може користити да би се сложена операција учинила једноставном и управљивом, чинећи целу апликацију сигурном и лаком за рад.

Препоручени чланци

Ово је водич за енкапсулацију у ЈаваСцрипт-у. Овде смо расправљали о раду енкапсулације у ЈаваСцрипт-у, заједно са концептима и предностима. Такође можете погледати следеће чланке да бисте сазнали више -

  1. Карактеристике ЈаваСцрипта (Коментари)
  2. Низови у ЈаваСцрипту - типови и методе
  3. ЈаваСцрипт алати
  4. За петљу у ЈаваСцрипту (Воркфлов)
  5. Варијабле у ЈаваСцрипт-у
  6. Врсте и грешке у руковању у ЈаваСцрипт-у
  7. Регек функције у Питхону (пример)
  8. Примери коментара на ПХП-у

Категорија: