Curs Web Development
Curs HTML
Curs CSS
Curs Javascript
Curs PHP
Curs Phyton
Curs SQL
Curs SEO

Programarea Orientată pe Obiect în JavaScript

Literalii de obiect și limitările lor

În JavaScript, poți crea obiecte rapid folosind sintaxa literală:


const persoana = {
  nume: "Ioan",
  salut() {
    return `Salut, ${this.nume}!`;
  }
};
console.log(persoana.salut()); // Salut, Ioan!

Limitări: - Nu poți crea mai multe instanțe ușor - Nu ai moștenire între obiecte - Nu e scalabil pentru aplicații mari

Exemplu Live: Obiect literal

  const persoana = {
    nume: "Ioan",
    salut() {
      return `Salut, ${this.nume}!`;
    }
  };

  function salutLiteral() {
    document.getElementById("output1").textContent = persoana.salut();
  }

Funcții constructor

O funcție constructor este o funcție specială folosită pentru a crea mai multe obiecte de același tip.


function Persoana(nume) {
  this.nume = nume;
  this.salut = function () {
    return `Salut, ${this.nume}!`;
  };
}
const ioan = new Persoana("Ioan");
console.log(ioan.salut()); // Salut, Ioan!

Exemplu Live: Funcție constructor

  function Persoana(nume) {
    this.nume = nume;
    this.salut = function () {
      return `Salut, ${this.nume}!`;
    };
  }

  function creeazaPersoana() {
    const nume = document.getElementById("numeInput").value;
    const p = new Persoana(nume);
    document.getElementById("output2").textContent = p.salut();
  }

Prototipuri și moștenire

JavaScript folosește moștenirea bazată pe prototipuri. Poți adăuga metode pe prototipul constructorului:


Persoana.prototype.laRevedere = function () {
  return `La revedere, ${this.nume}!`;
};
console.log(ioan.laRevedere()); // La revedere, Ioan!

Exemplu Live: Metodă din prototip

  Persoana.prototype.laRevedere = function () {
    return `La revedere, ${this.nume}!`;
  };

  const ioan = new Persoana("Ioan");

  function laRevedere() {
    document.getElementById("output3").textContent = ioan.laRevedere();
  }

Metoda Object.create

Object.create() permite crearea unui obiect care moștenește de la altul.


const animal = {
  vorbeste() {
    return "Sunet generic";
  }
};
const caine = Object.create(animal);
caine.vorbeste = function () {
  return "Ham ham!";
};
console.log(caine.vorbeste()); // Ham ham!

Exemplu Live: Object.create

  const animal = {
    vorbeste() {
      return "Sunet generic";
    }
  };

  const caine = Object.create(animal);
  caine.vorbeste = function () {
    return "Ham ham!";
  };

  function vorbesteCaine() {
    document.getElementById("output4").textContent = caine.vorbeste();
  }

Clase ES6

ES6 introduce sintaxa class, care face codul mai clar și mai apropiat de alte limbaje OOP.


class Persoana {
  constructor(nume) {
    this.nume = nume;
  }
  salut() {
    return `Salut, ${this.nume}!`;
  }
}
const ioan = new Persoana("Ioan");
console.log(ioan.salut()); // Salut, Ioan!

Exemplu Live: Clasă ES6

  class PersoanaClasa {
    constructor(nume) {
      this.nume = nume;
    }
    salut() {
      return `Salut, ${this.nume}!`;
    }
  }

  function salutClasa() {
    const p = new PersoanaClasa("Ioan");
    document.getElementById("output5").textContent = p.salut();
  }

Metode statice și Getters/Setters

Metodele statice aparțin clasei, nu instanței. Getters și setters controlează accesul la proprietăți.


class Calculator {
  static aduna(a, b) {
    return a + b;
  }
}
console.log(Calculator.aduna(2, 3)); // 5

class Cont {
  constructor(sold) {
    this._sold = sold;
  }
  get sold() {
    return this._sold;
  }
  set sold(val) {
    if (val >= 0) this._sold = val;
  }
}
const cont = new Cont(100);
cont.sold = 150;
console.log(cont.sold); // 150

Exemplu Live: Calculator și Cont

Încapsulare și câmpuri private

ES2022 introduce câmpuri private cu #, accesibile doar din interiorul clasei.


class ContSecret {
  #parola = "1234";
  verificaParola(input) {
    return input === this.#parola;
  }
}
const cont = new ContSecret();
console.log(cont.verificaParola("1234")); // true
console.log(cont.#parola); // ❌ eroare: proprietate privată

Exemplu Live: Verificare parolă

  class ContSecret {
    #parola = "1234";
    verificaParola(input) {
      return input === this.#parola;
    }
  }

  const contSecret = new ContSecret();

  function verifica() {
    const input = document.getElementById("parolaInput").value;
    const rezultat = contSecret.verificaParola(input);
    document.getElementById("output8").textContent = rezultat ? "✅ Parolă corectă" : "❌ Parolă greșită";
  }

Top