Middle
Leg uit wat het modulepatroon in JavaScript is en waar het wordt toegepast.
sobes.tech AI
Antwoord van AI
Het modulaire patroon maakt het mogelijk om code te encapsuleren door een publieke en private interface te definiëren. Dit wordt bereikt door het creëren van een private scope met behulp van onmiddellijk aangeroepen function expressions (IIFE) of de syntax van ES Modules.
Toepassingen:
- Encapsulatie: Verbergt de interne implementatie en biedt alleen de benodigde publieke API.
- Voorkomt vervuiling van de globale scope: Variabelen en functies blijven lokaal binnen de module.
- Codeorganisatie: Verdeelt de applicatie in logische blokken, wat begrip en onderhoud vergemakkelijkt.
- Herbruikbaarheid van code: Modules kunnen worden geïmporteerd en gebruikt in verschillende delen van de applicatie.
Voorbeeld met gebruik van IIFE:
// Creëer een private scope
const myModule = (() => {
// Private variabele
let privateVariable = 'Ik ben privé!';
// Private functie
const privateMethod = () => {
console.log(privateVariable);
};
// Publieke functie
const publicMethod = () => {
console.log('Dit is een publieke functie.');
privateMethod(); // Toegang tot private functie
};
// Alleen publieke leden retourneren
return {
publicMethod: publicMethod
};
})();
// Gebruik van de publieke interface
myModule.publicMethod(); // Toont "Dit is een publieke functie." en "Ik ben privé!"
// myModule.privateVariable; // Fout - niet toegankelijk
// myModule.privateMethod(); // Fout - niet toegankelijk
Voorbeeld met gebruik van ES Modules:
// module.js
// Private variabele (niet geëxporteerd)
const privateVariable = 'Ik ben privé in ES Module!';
// Private functie (niet geëxporteerd)
const privateMethod = () => {
console.log(privateVariable);
};
// Publieke functie (geëxporteerd)
export const publicMethod = () => {
console.log('Dit is een publieke functie in ES Module.');
privateMethod();
};
// main.js
import { publicMethod } from './module.js';
publicMethod(); // Toont "Dit is een publieke functie in ES Module." en "Ik ben privé in ES Module!"