MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Funcțiile constructor pentru obiecte

În afară de crearea de noi obiecte JavaScript, mai avem posibilitatea să creăm noi tipuri de obiecte folosind funcții speciale - constructori. Constructorul permite definirea unui nou tip de obiect. Definirea tipului poate include o funcție constructor, metode și proprietăți.

Pentru a începe, să definim constructorul:

function Person(pName, pAge) {
   this.name = pName;
   this.age = pAge;
   this.print = function(){
       console.log("Name: ", this.name);
       console.log("Age: ", this.age);
   };
}

Constructorul este o funcție obișnuită, cu excepția faptului că în cadrul său putem seta proprietăți și metode. Pentru a seta proprietăți și metode, se folosește cuvântul cheie this:

this.name = pName;

În acest caz, sunt setate două proprietăți, name și age, și o metodă print.

De obicei, numele constructorilor, spre deosebire de numele funcțiilor obișnuite, încep cu litera mare.

După aceasta, în program, putem defini un obiect de tip Person și putem utiliza proprietățile și metodele sale:


// definirea constructorului pentru obiecte de tip Person
function Person(pName, pAge) {
   this.name = pName;
   this.age = pAge;
   this.print = function(){
       console.log(`Name: ${this.name}  Age: ${this.age}`);
   };
}

// definirea unui obiect de tip Person
const tom = new Person("Tom", 39);

// accesarea proprietății obiectului
console.log(tom.name); // Tom

// accesarea metodei obiectului
tom.print(); // Name: Tom  Age: 39

Pentru a apela constructorul, adică pentru a crea un obiect de tip Person, este necesar să folosim cuvântul cheie new:

const tom = new Person("Tom", 39);

Ulterior, folosind numele obiectului, putem accesa proprietățile și metodele sale, care sunt definite în interiorul funcției constructorului:

// accesarea proprietății obiectului
console.log(tom.name); // Tom
// accesarea metodei obiectului
tom.print(); // Name: Tom  Age: 39

Este important de menționat că, desigur, am fi putut defini obiectul în modul obișnuit:

const tom = {
   name: "Tom",
   age: 39,
   print: function(){
       console.log(`Name: ${this.name}  Age: ${this.age}`);
   }
}

Cu toate acestea, utilizarea funcțiilor constructor permit simplificarea creării repetate a obiectelor similare, care au aceeași structură de proprietăți și metode. Practic, definim un nou tip de obiecte. De exemplu:

function Person(pName, pAge) {
   this.name = pName;
   this.age = pAge;
   this.print = function(){
       console.log(`Name: ${this.name}  Age: ${this.age}`);
   };
}
const tom = new Person("Tom", 39);
const bob = new Person("Bob", 43);
const sam = new Person("Sam", 28);

tom.print();    // Name: Tom  Age: 39
bob.print();    // Name: Bob  Age: 43
sam.print();    // Name: Sam  Age: 28

Obiectele de tipuri similare pot fi, de asemenea, transmise ca argumente către funcții sau returnate din funcții; ele pot servi ca proprietăți ale altor obiecte, pot fi stocate în array-uri, etc. De exemplu:

function Person(pName, pAge) {
   this.name = pName;
   this.age = pAge;
   this.print = function(){
       console.log(`Name: ${this.name}  Age: ${this.age}`);
   };
}
function printPersonName(person){
   console.log(person.name);
}
// array format din trei obiecte Person
const people = [new Person("Tom", 39), new Person("Bob", 43), new Person("Sam", 28)];

for(person of people){
   printPersonName(person);
}

Operatorul instanceof permite verificarea faptului că un obiect a fost creat cu ajutorul unui anumit constructor. Dacă obiectul a fost creat cu ajutorul unui anumit constructor, atunci operatorul returnează true:

// definirea constructorului pentru obiecte de tip Person
function Person(pName, pAge) {
   this.name = pName;
   this.age = pAge;
   this.print = function(){
       console.log(`Name: ${this.name}  Age: ${this.age}`);
   };
}

// definirea constructorului pentru obiecte de tip Employee
function Employee(eName, eCompany) {
   this.name = eName;
   this.company = eCompany;
   this.print = function(){
       console.log(`Name: ${this.name}  Company: ${this.company}`);
   };
}

const tom = new Person("Tom", 39);
const bob = new Employee("Bob", "Google");

console.log(tom instanceof Person);       // true - tom este un obiect de tip Person
console.log(bob instanceof Employee);   // true - bob este un obiect de tip Employee
console.log(tom instanceof Employee);   // false - tom NU este un obiect de tip Employee
← Lecția anterioară Lecția următoare →