Object.create în JavaScript

Obiecte ES5 (toate browserele moderne)

Creează un obiect nou care are ca prototip obiectul dat (moștenește proprietățile lui).

Sintaxă
Object.create(prototip, proprietati)

Ce face Object.create

Fiecare obiect JavaScript are un prototip: un alt obiect în care caută proprietățile pe care nu le are el însuși. Object.create(p) creează un obiect gol cu prototipul p.

Object.create(null) creează un obiect fără niciun prototip, deci fără toString, hasOwnProperty sau alte proprietăți moștenite. Este util ca dicționar simplu. Al doilea parametru, opțional, definește proprietăți cu descriptori, ca la Object.defineProperties.

Parametri

Parametru Descriere
prototip Obiectul folosit ca prototip sau null.
proprietati Opțional. Proprietăți definite cu descriptori.

Ce returnează

Un obiect nou.

Exemple

Exemplul 1: Moștenire prin prototip

const animal = {
  prezinta() {
    return `Sunt ${this.nume} și fac ${this.sunet}.`;
  },
};

const pisica = Object.create(animal);
pisica.nume = "Miți";
pisica.sunet = "miau";

console.log(pisica.prezinta());
console.log(Object.getPrototypeOf(pisica) === animal);
console.log(Object.keys(pisica));

Rezultat

Sunt Miți și fac miau.
true
[ 'nume', 'sunet' ]

Exemplul 2: Dicționar fără prototip

const obisnuit = {};
const gol = Object.create(null);

console.log("toString" in obisnuit, "toString" in gol);
gol.constructor = "o cheie oarecare";
console.log(gol.constructor);

Rezultat

true false
o cheie oarecare

Greșeli frecvente

  • Apelezi dictionar.hasOwnProperty(cheie) pe un obiect creat cu Object.create(null) și primești TypeError. Folosește Object.hasOwn(dictionar, cheie).

Comenzi înrudite