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 cuObject.create(null)și primeștiTypeError. FoloseșteObject.hasOwn(dictionar, cheie).
Comenzi înrudite
Object.getPrototypeOf / setPrototypeOf: Citește sau schimbă prototipul unui obiect (obiectul de la care moștenește proprietăți).Object.defineProperty / defineProperties: Definește o proprietate cu control total: dacă poate fi modificată, afișată în bucle sau ștearsă, plus get/set.Map (get, set, has, delete): O colecție de perechi cheie–valoare în care cheile pot fi de orice tip și ordinea este păstrată.