Object.getPrototypeOf / setPrototypeOf în JavaScript

Obiecte ES5 (setPrototypeOf: ES2015)

Citește sau schimbă prototipul unui obiect (obiectul de la care moștenește proprietăți).

Sintaxă
Object.getPrototypeOf(obiect)
Object.setPrototypeOf(obiect, prototip)
prototip.isPrototypeOf(obiect)

Ce face Object.getPrototypeOf / setPrototypeOf

Object.getPrototypeOf returnează prototipul obiectului, adică următoarea verigă din lanțul de moștenire. Pentru o instanță a unei clase, este Clasa.prototype.

Object.setPrototypeOf schimbă prototipul unui obiect existent. Merge, dar este lent, iar motoarele JavaScript nu mai pot optimiza obiectul; preferă Object.create la crearea obiectului. isPrototypeOf verifică dacă un obiect apare oriunde în lanțul de prototipuri al altuia.

Parametri

Parametru Descriere
obiect Obiectul inspectat sau modificat.
prototip Noul prototip (un obiect sau null).

Ce returnează

getPrototypeOf: prototipul sau null. setPrototypeOf: obiectul. isPrototypeOf: true sau false.

Exemple

Exemplul 1: Lanțul de prototipuri al unei clase

class Vehicul {}
class Masina extends Vehicul {}
const dacia = new Masina();

console.log(Object.getPrototypeOf(dacia) === Masina.prototype);
console.log(Object.getPrototypeOf(Masina.prototype) === Vehicul.prototype);
console.log(Vehicul.prototype.isPrototypeOf(dacia));
console.log(Object.getPrototypeOf(Object.prototype));

Rezultat

true
true
true
null

Exemplul 2: Schimbarea prototipului

const salut = { saluta() { return `Salut, ${this.nume}!`; } };
const ana = { nume: "Ana" };

Object.setPrototypeOf(ana, salut);
console.log(ana.saluta());

Rezultat

Salut, Ana!

Greșeli frecvente

  • Folosești proprietatea veche __proto__ în cod nou. Folosește Object.getPrototypeOf și Object.create.

Comenzi înrudite

  • Object.create: Creează un obiect nou care are ca prototip obiectul dat (moștenește proprietățile lui).
  • Reflect: Funcții pentru operațiile de bază pe obiecte (citire, scriere, ștergere, chei), cu aceleași nume ca în Proxy.
  • Object.hasOwn / hasOwnProperty: Verifică dacă un obiect are o proprietate proprie (nu moștenită) cu numele dat.