JavaScript-ի փակումներով գրադարաններ
Հաճախ JavaScript-ում ստեղծվում են գրադարաններ, որոնք ներկայացնում են ֆունկցիաների հավաքածուներ այլ ծրագրավորողների կողմից օգտագործման համար:
Նման գրադարանները սովորաբար փաթաթվում են մոդուլների մեջ փակումների միջոցով: Դա արվում է այն նպատակով, որ գրադարանը միացնելիս արտաքին աշխարհում հնարավորինս քիչ ֆունկցիաներ հայտնվեն:
Որպես կանոն, յուրաքանչյուր գրադարան ձգտում է ստեղծել արտաքին աշխարհում միայն մեկ փոփոխական - գրադարանի ֆունկցիաներով օբյեկտ: Մինչդեռ ներսում գրադարանի կոդում ֆունկցիաներից մի մասը հանդիսանում են հիմնական, իսկ մյուս մասը` օժանդակ: Ակնհայտ է, որ մենք ցանկանում ենք արտաքին աշխարհ էքսպորտել միայն անհրաժեշտ ֆունկցիաները, չխցանելով էքսպորտվող օբյեկտը օժանդակ ֆունկցիաներով:
Դիտարկենք օրինակով: Ենթադրենք, մենք ունենք ֆունկցիաների հետևյալ հավաքածուն, որը մենք ցանկանում ենք վերածել գրադարանի.
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(''));
}
// օժանդակ ֆունկցիա
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
Եկեք ձևավորենք մեր ֆունկցիաները որպես մոդուլ.
;(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(''));
}
// օժանդակ ֆունկցիա
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
})();
Այժմ էքսպորտենք բոլոր ֆունկցիաները, բացառությամբ օժանդակի.
;(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(''));
}
// օժանդակ ֆունկցիա
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
window.math = {square, cube, avg, digitsSum};
})();
Ենթադրենք ունենք HTML էջ index.html.
<html>
<head>
<script>
</script>
</head>
</html>
Միացնենք դրան մեր գրադարանը.
<html>
<head>
<script src="math.js"></script>
<script>
</script>
</head>
</html>
Օգտագործենք մեր գրադարանի ֆունկցիաները.
<html>
<head>
<script src="math.js"></script>
<script>
alert(math.avg([1, 2, 3]) + math.square());
</script>
</head>
</html>
Տրված է հետևյալ կոդը.
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;
}
// օժանդակ ֆունկցիա
function sum(arr, pow) {
let res = 0;
for (let elem of arr) {
res += elem ** pow;
}
return res;
}
Ձևավորեք այս կոդը որպես մոդուլ: Էքսպորտեք դուրս բոլոր ֆունկցիաները, բացառությամբ օժանդակի:
Ուսումնասիրեք underscore գրադարանը:
Ստեղծեք ձեր սեփական նմանատիպ գրադարանը, կրկնելով
դրանում օրիգինալ գրադարանի 5-10 ֆունկցիաները: