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șteObject.getPrototypeOfșiObject.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.