Sobes.tech
Middle

Explica ce este modelul de module în JavaScript și unde se aplică.

sobes.tech AI

Răspuns de la AI

Patternul modulului permite încapsularea codului definind o interfață publică și privată. Acest lucru se realizează prin crearea unui domeniu privat folosind expresii de funcție invocate imediat (IIFE) sau sintaxa modulelor ES.

Se aplică pentru:

  • Încapsulare: Ascunde implementarea internă, oferind doar API-ul public necesar.
  • Prevenirea poluării domeniului global: Variabilele și funcțiile rămân locale în interiorul modulului.
  • Organizarea codului: Împarte aplicația în blocuri logice, facilitând înțelegerea și întreținerea.
  • Reutilizarea codului: Modulele pot fi importate și utilizate în diferite părți ale aplicației.

Exemplu cu utilizarea IIFE:

// Creăm un domeniu privat
const myModule = (() => {
  // Variabilă privată
  let privateVariable = 'Sunt privat!';

  // Funcție privată
  const privateMethod = () => {
    console.log(privateVariable);
  };

  // Funcție publică
  const publicMethod = () => {
    console.log('Aceasta este o funcție publică.');
    privateMethod(); // Acces la funcția privată
  };

  // Returnăm doar membrii publici
  return {
    publicMethod: publicMethod
  };
})();

// Utilizarea interfeței publice
myModule.publicMethod(); // Va afișa "Aceasta este o funcție publică." și "Sunt privat!"
// myModule.privateVariable; // Eroare - inaccesibil
// myModule.privateMethod(); // Eroare - inaccesibil

Exemplu cu utilizarea modulelor ES:

// module.js
// Variabilă privată (neexportată)
const privateVariable = 'Sunt privat în modul ES!';

// Funcție privată (neexportată)
const privateMethod = () => {
  console.log(privateVariable);
};

// Funcție publică (exportată)
export const publicMethod = () => {
  console.log('Aceasta este o funcție publică în modul ES.');
  privateMethod();
};
// main.js
import { publicMethod } from './module.js';

publicMethod(); // Va afișa "Aceasta este o funcție publică în modul ES." și "Sunt privat în modul ES!"