Bibliotēkas ar aizvērumiem JavaScript
Bieži JavaScript tiek izveidotas bibliotēkas, kuras ir funkciju kopas, ko var izmantot citi programmētāji.
Šādas bibliotēkas parasti tiek ietītas moduļos ar aizvērumu palīdzību. Tas tiek darīts, lai pievienojot bibliotēku ārējā vidē parādītos pēc iespējas mazāk funkciju.
Parasti katra bibliotēka cenšas izveidot ārējā vidē tikai vienu mainīgo - objektu ar bibliotēkas funkcijām. Tajā pašā laikā bibliotēkas kodā daļa funkciju ir pamata, bet daļa - palīgfunkcijas. Acīmredzot, ārējā vidē mēs vēlamies eksportēt tikai nepieciešamās funkcijas, nepiesārņojot eksportēto objektu ar palīgfunkcijām.
Apskatīsim piemērā. Pieņemsim, ka mums ir šāda funkciju kopa, kuru mēs vēlētos pārvērst bibliotēkā:
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(''));
}
// palīgfunkcija
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
Iesaiņosim mūsu funkcijas moduļa formātā:
;(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(''));
}
// palīgfunkcija
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
})();
Un tagad eksportēsim visas funkcijas, izņemot palīgfunkciju:
;(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(''));
}
// palīgfunkcija
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
window.math = {square, cube, avg, digitsSum};
})();
Pieņemsim, ka mums ir HTML lapa index.html:
<html>
<head>
<script>
</script>
</head>
</html>
Pievienosim tai mūsu bibliotēku:
<html>
<head>
<script src="math.js"></script>
<script>
</script>
</head>
</html>
Izmantosim funkcijas no mūsu bibliotēkas:
<html>
<head>
<script src="math.js"></script>
<script>
alert(math.avg([1, 2, 3]) + math.square());
</script>
</head>
</html>
Dots šāds kods:
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;
}
// palīgfunkcija
function sum(arr, pow) {
let res = 0;
for (let elem of arr) {
res += elem ** pow;
}
return res;
}
Noformējiet šo kodu kā moduli. Eksportējet ārā visas funkcijas, izņemot palīgfunkciju.
Izpētiet bibliotēku underscore.
Izveidojiet savu līdzīgu bibliotēku, atkārtojot
tajā 5-10 funkcijas no oriģinālās
bibliotēkas.