Bibliotekos uždarumo pagalba JavaScript
JavaScript dažnai kuriamos bibliotekos, kurios yra funkcijų rinkiniai, skirti naudoti kitiems programuotojams.
Tokios bibliotekos paprastai apgaubiamos moduliais uždarymo pagalba. Tai daroma tam, kad prijungus biblioteką išoriniame pasaulyje atsirastų kuo mažiau funkcijų.
Paprastai kiekviena biblioteka stengiasi sukurti išoriniame pasaulyje tik vieną kintamąjį - objektą su bibliotekos funkcijomis. Tuo tarpu viduje bibliotekos kode dalis funkcijų yra pagrindinės, o dalis - pagalbinės. Akivaizdu, kad į išorinį pasaulį mes norime eksportuoti tik reikalingas funkcijas, neužteršdami eksportuojamo objekto pagalbinėmis funkcijomis.
Pažiūrėkime pavyzdžiu. Tarkime, kad mes turime tokį funkcijų rinkinį, kurį norėtume paversti biblioteka:
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(''));
}
// pagalbinė funkcija
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
Suformuokime mūsų funkcijas kaip modulį:
;(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(''));
}
// pagalbinė funkcija
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
})();
O dabar eksportuokime visas funkcijas, išskyrus pagalbinę:
;(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(''));
}
// pagalbinė funkcija
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
window.math = {square, cube, avg, digitsSum};
})();
Tarkime, kad turime HTML puslapį index.html:
<html>
<head>
<script>
</script>
</head>
</html>
Prijunkime prie jo mūsų biblioteką:
<html>
<head>
<script src="math.js"></script>
<script>
</script>
</head>
</html>
Panaudokime funkcijas iš mūsų bibliotekos:
<html>
<head>
<script src="math.js"></script>
<script>
alert(math.avg([1, 2, 3]) + math.square());
</script>
</head>
</html>
Duotas toks kodas:
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;
}
// pagalbinė funkcija
function sum(arr, pow) {
let res = 0;
for (let elem of arr) {
res += elem ** pow;
}
return res;
}
Suformuokite šį kodą kaip modulį. Eksportuokite į išorę visas funkcijas, išskyrus pagalbinę.
Išstudijuokite biblioteką underscore.
Sukurkite savo panašią biblioteką, pakartoję
joje 5-10 originalios
bibliotekos funkcijų.