MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Moștenirea array-urilor

Array-ul reprezintă cea mai simplă modalitate de definire a unui set de date. Cu toate acestea, uneori, capacitățile de bază ale array-urilor pot fi insuficiente. De exemplu, să definim un array care reprezintă o anumită echipă:

const team = ["Tom", "Sam", "Bob"];
for(const person of team) {
   console.log(person);
}

Dar ce facem dacă dorim să adăugăm la echipă anumite atribute suplimentare - numele antrenorului, țara sau orașul unde are sediul echipa, numele, sau alte caracteristici? La prima vedere, am putea defini un obiect complex:

const team = {
   name: "Barcelona",              // denumirea
   members: ["Tom", "Sam", "Bob"]  // jucători
};
for(const person of team.members) {
   console.log(person);
}

Dar există și o altă soluție, care ne permite să definim propriul tip de colecție: să creăm propria clasă, care va fi moștenită din Array.

class Team extends Array{
   
   constructor(name, ...members){
       super(...members);
       this.name = name;
   }
}

Aici presupunem că numele echipei este primul parametru al constructorului clasei, iar al doilea parametru reprezintă lista de jucători a echipei, numărul cărora nu este fix.

Datorită moștenirii din Array, putem trata obiectele clasei Team ca seturi de date și putem aplica asupra lor toate operațiile care se aplică array-urilor:

class Team extends Array{
   
   constructor(name, ...members){
       super(...members);
       this.name = name;
   }
}
// creăm obiectul echipei
const barcelona = new Team("Barcelona", "Tom", "Sam", "Bob");
console.log(barcelona);     // Team(3) ["Tom", "Sam", "Bob"]

// parcurgere set
for(const person of barcelona) {
   console.log(person);
}
barcelona.push("Tim");      // adăugăm un element
console.log(barcelona);     // Team(4) ["Tom", "Sam", "Bob", "Tim"]
barcelona.splice(1, 1);     // ștergem al doilea element
console.log(barcelona);     // Team(3) ["Tom", "Bob", "Tim"]

Suprascrierea metodelor

La fel ca în moștenire, putem să suprascriem metodele moștenite. De exemplu, vom suprascrie comportamentul metodei push(), care este responsabilă pentru adăugarea la sfârșitul array-ului:

class Team extends Array{
   
   constructor(name, ...members){
       super(...members);
       this.name = name;
   }
   push(person){
       if(person !== "admin") super.push(person);
   }
}

const snowbars = new Team("SnowBars", "Tom", "Sam", "Bob");

snowbars.push("admin");     // adăugăm un element - admin
console.log(snowbars);      // Team(3) ["Tom", "Sam", "Bob"]
snowbars.push("Tim");       // adăugăm un element - Tim
console.log(snowbars);      // Team(4) ["Tom", "Sam", "Bob", "Tim"]

În acest caz, dacă în metodă este transmis orice nume, în afară de "admin", atunci acesta este adăugat la echipă.

← Lecția anterioară Lecția următoare →