Bibliotekat përmes mbylljeve në JavaScript
Shpesh në JavaScript krijohen biblioteka, që përfaqësojnë grupe funksionesh për përdorim nga programues të tjerë.
Biblioteka të tilla zakonisht mbështjellen në module përmes mbylljeve. Kjo bëhet në mënyrë që gjatë lidhjes së bibliotekës në botën e jashtme të shfaqen sa më pak funksione.
Në përgjithësi, çdo bibliotekë përpiqet të krijojë në botën e jashtme vetëm një ndryshore - objekt me funksionet e bibliotekës. Në të njëjtën kohë, brenda kodit të bibliotekës, disa funksione janë themelore, ndërsa disa të tjerë janë ndihmëse. Natyrisht, ne duam të eksportojmë në botën e jashtme vetëm funksionet e nevojshme, duke mos e bërë të rrëmujë objektin e eksportuar me funksione ndihmëse.
Le të shohim një shembull. Supozoni se kemi grupin e mëposhtëm të funksioneve, të cilat dëshirojmë t'i kthejmë në një bibliotekë:
function square(num) {
return num ** 2;
}
function cube(num) {
return num ** 3;
}
function avg(arr) {
return sum(arr, 1) / arr.length;
}
function digitsSum(num) {
return sum(String(num).split(''));
}
// funksion ndihmës
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
Le t'i organizojmë funksionet tona në formën e një moduli:
;(function() {
function square(num) {
return num ** 2;
}
function cube(num) {
return num ** 3;
}
function avg(arr) {
return sum(arr, 1) / arr.length;
}
function digitsSum(num) {
return sum(String(num).split(''));
}
// funksion ndihmës
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
})();
Dhe tani le të eksportojmë të gjitha funksionet, përveç atij ndihmës:
;(function() {
function square(num) {
return num ** 2;
}
function cube(num) {
return num ** 3;
}
function avg(arr) {
return sum(arr, 1) / arr.length;
}
function digitsSum(num) {
return sum(String(num).split(''));
}
// funksion ndihmës
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
window.math = {square, cube, avg, digitsSum};
})();
Supozoni se kemi një faqe HTML index.html:
<html>
<head>
<script>
</script>
</head>
</html>
Le ta lidhim bibliotekën tonë me të:
<html>
<head>
<script src="math.js"></script>
<script>
</script>
</head>
</html>
Le të përdorim funksionet nga biblioteka jonë:
<html>
<head>
<script src="math.js"></script>
<script>
alert(math.avg([1, 2, 3]) + math.square());
</script>
</head>
</html>
Jepet kodi i mëposhtëm:
function avg1(arr) {
return sum(arr, 1) / arr.length;
}
function avg2(arr) {
return sum(arr, 2) / arr.length;
}
function avg3(arr) {
return sum(arr, 3) / arr.length;
}
// funksion ndihmës
function sum(arr, pow) {
let res = 0;
for (let elem of arr) {
res += elem ** pow;
}
return res;
}
Organizojeni këtë kod në formën e një moduli. Eksportoni jashtë të gjitha funksionet, përveç atij ndihmës.
Studioni bibliotekën underscore.
Krijoni bibliotekën tuaj të ngjashme, duke përsëritur
në të 5-10 funksione të bibliotekës
origjinale.