Sissejuhatus kapseldamisse JavaScripti

JavaScript on vastupidav objektorienteeritud skriptikeel, mis on võimeline looma keerulisi rakendusi nii kliendil kui ka server. Mida keerukam on rakendamine, seda parem on hooldatav ja paindlik juhend olukorra lahendamiseks. Kapseldamine, üks objektorienteeritud programmeerimise põhimõtteid, on selliste eesmärkide saavutamise võti.

Kapseldamine JavaScripti on definitsiooni järgi protsess, mis seob andmeid funktsioonidega, mis neid mõjutavad. Kapseldamine võimaldab meil andmeid kontrollida ja kinnitada. JavaScriptis sarnanevad muutujad andmetega.

Kapseldamine tähendab teabe peitmist, st ideed, et objekti sisemised üksused ei tohiks olla avalikud üksused. See aitab piirata muutujate loata kasutamist. Selle asemel, kui helistajad soovivad saavutada kindlat tulemust, peaks ta objekti privaatsetele muutujatele juurdepääsu saamiseks kasutama avalikku meetodit või objekti sisemisi üksusi.

Kapseldamise toimimine JavaScriptis

Võtame lihtsa ülesande, kus „töötaja” objekt sisaldab kahte atribuuti „name”.

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

Ülaltoodud näites näeb kõik korras. Koostasime objekti, printisime selle atribuudi väärtuse ja muutsime seda. Kuid probleem ilmneb siis, kui mõni kasutaja proovib nimeatribuudile täisarvu seada.

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

Mis puutub JavaScripti, siis see on täiesti seaduslik, kuna JavaScriptis võib muutuja aktsepteerida kõiki talle antud tüüpe. Selle parandamiseks peame määrama kehtivate märkide vahemiku, mille saab seada objekti atribuudi nimele. Need kinnitused ei saa töötada, kui helistaja pääseb juurde nende andmete väärtusele ja saab neid muuta. Selle jaoks oleks lihtne lahendus

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

Ülaltoodud näide rakendab valideerimist, kuid tal on siiski ka mõningaid vigu, kuna helistaja pääseb nimele otse juurde, kuid ta saab seda siiski muuta.

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.

Lõpp-eesmärk on siin see, et muutuja nimi ei peaks olema objektiga „töötaja” globaalselt saadaval. Kapseldamine aitab selle välja. Seda saab lahendada mõistete funktsiooni ulatus ja sulgemine abil.

1. Funktsiooni ulatus

Kõik muutujad, mis on kirjutatud funktsioonide koodiplokki, jäävad väljastpoolt peidetuks.

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

Seega, kui liigutame muutuja „name” funktsiooni „setName” sees, siis helistajad sellele otse juurde ei pääse. Kuid muutuja „name” sisestamine funktsiooni „setName” otse pole lihtne, kuna funktsiooniploki sisest muutujat ei saa väljaspool selle ulatust kasutada, seega pole nimi „getName” meetodi jaoks saadaval. Selleks aitab sulgemine.

2. Sulgurid

Kui kaks funktsiooni on komplekteeritud koos viidetega ümbritsevale olekule või leksikaalsele keskkonnale, nimetatakse sulgemiseks. Lihtsamalt öeldes annab sulgemine juurdepääsu funktsiooni kohalikule muutujale, mida saab kasutada vanemfunktsiooni sees oleva teise funktsiooni jaoks. Siin on funktsiooni setName sees välismaailma eest varjatud muutuja nimi. Kuid sisemisele objektile (myObj) pääseb juurde:

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!

Nüüd oleme kasutanud sulgemise mõistet, sisemisele objektile myObj pääseb juurde mõlema funktsiooni abil. Kuid ikkagi on sisemise objekti juurde pääsemisel viga. Ülalpool oleme näinud, et töötajat.nime ei saa kasutada, ega töötajat.myObj.getName saab kasutada, kuna ka myObj on funktsiooni jaoks privaatne ja privaatsetele muutujatele pole niimoodi väljas juurdepääsu. Seega peame sisemise objekti tagastama iga kord, kui anonüümset funktsiooni kutsutakse, ja määrama see välisele muutujale.

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.

Kapseldamise eelised JavaScriptis

Kapseldamise JavaScriptis kasutamise peamine eelis on andmete turvalisuse tagamine. Kapseldamise muude eeliste hulka kuuluvad:

  • Kapseldamine kaitseb eset ebaseadusliku juurdepääsu eest.
  • Kapseldamine aitab saavutada taset ilma selle keerulisi detaile paljastamata.
  • See vähendab inimlikke vigu.
  • Muutke rakendus paindlikumaks ja hallatavamaks.
  • Lihtsustab rakendust.

Järeldus

Kapseldamine on JavaScripti tööriist, mida saab kasutada keeruka toimingu hõlpsaks ja hallatavaks muutmiseks, muutes üldise rakenduse turvaliseks ja töötavaks.

Soovitatavad artiklid

See on juhend kapseldamisest JavaScripti. Siin käsitleme javascriptis kapseldamise toimimist koos kontseptsioonide ja eelistega. Lisateabe saamiseks võite vaadata ka järgmisi artikleid -

  1. JavaScripti omadused (kommentaarid)
  2. Massiivid JavaScriptis - tüübid ja meetodid
  3. JavaScripti tööriistad
  4. Loops JavaScriptis (töövoog)
  5. Muutujad JavaScriptis
  6. Tüübid ja vigade käsitlemine JavaScriptis
  7. Regexi funktsioonid Pythonis (näide)
  8. Kommentaaride näited PHP-s

Kategooria: