Zárásokkal készített könyvtárak JavaScriptben
Gyakran készítenek könyvtárakat JavaScriptben, amelyek más programozók által használható függvénygyűjtemények.
Az ilyen könyvtárakat általában zárásokkal becsomagolják modulokká. Ez azért történik, hogy a könyvtár csatolásakor a külső világban oly kevés függvény jelenjen meg, amennyire csak lehetséges.
Általában minden könyvtár arra törekszik, hogy a külső világban csak egy változót hozzon létre - a könyvtár függvényeit tartalmazó objektumot. Eközben a könyvtár kódján belül egyes függvények alapvetőek, mások - kisegítőek. Nyilvánvaló, hogy a külső világba csak a szükséges függvényeket akarjuk exportálni, anélkül, hogy az exportált objektumot feltölnénk kisegítő függvényekkel.
Nézzünk egy példát. Tegyük fel, hogy rendelkezünk a következő függvénygyűjteménnyel, amit könyvtárrá szeretnénk alakítani:
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(''));
}
// kisegítő függvény
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
Alakítsuk függvényeinket modullá:
;(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(''));
}
// kisegítő függvény
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
})();
És most exportáljunk minden függvényt, kivéve a kisegítő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(''));
}
// kisegítő függvény
function sum(arr) {
let res = 0;
for (let elem of arr) {
res += +elem;
}
return res;
}
window.math = {square, cube, avg, digitsSum};
})();
Tegyük fel, hogy van egy index.html HTML oldalunk:
<html>
<head>
<script>
</script>
</head>
</html>
Csatoljuk hozzá a könyvtárunkat:
<html>
<head>
<script src="math.js"></script>
<script>
</script>
</head>
</html>
Használjuk a könyvtárunk függvényeit:
<html>
<head>
<script src="math.js"></script>
<script>
alert(math.avg([1, 2, 3]) + math.square());
</script>
</head>
</html>
Adott a következő kód:
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;
}
// kisegítő függvény
function sum(arr, pow) {
let res = 0;
for (let elem of arr) {
res += elem ** pow;
}
return res;
}
Alakítsa ezt a kódot modullá. Exportálja kifelé az összes függvényt, kivéve a kisegítőt.
Tanulmányozza a underscore könyvtárat.
Készítsen saját, ehhez hasonló könyvtárat, ismételve
benne az eredeti könyvtár 5-10 függvényét.