Ce face Object.getOwnPropertyDescriptor / Descriptors
getOwnPropertyDescriptor arată cum este definită o proprietate proprie a obiectului (nu una moștenită). Dacă proprietatea nu există, returnează undefined.
getOwnPropertyDescriptors returnează descriptorii tuturor proprietăților proprii. Combinat cu Object.create sau Object.defineProperties, copiază corect și getter-ele și setter-ele, pe care Object.assign le transformă în valori simple. Metodele vechi __lookupGetter__ și __lookupSetter__ sunt învechite.
Parametri
| Parametru | Descriere |
|---|---|
obiect |
Obiectul inspectat. |
cheie |
Numele proprietății (doar pentru varianta la singular). |
Ce returnează
Un descriptor sau undefined; la plural, un obiect cu descriptorii tuturor proprietăților.
Exemple
Exemplul 1: Descriptorul unei proprietăți obișnuite și al unui getter
const cont = {
sold: 250,
get soldFormatat() {
return `${this.sold} lei`;
},
};
console.log(Object.getOwnPropertyDescriptor(cont, "sold"));
console.log(Object.getOwnPropertyDescriptor(cont, "soldFormatat"));
console.log(Object.getOwnPropertyDescriptor(cont, "toString"));
Rezultat
{ value: 250, writable: true, enumerable: true, configurable: true }
{
get: [Function: get soldFormatat],
set: undefined,
enumerable: true,
configurable: true
}
undefined
Exemplul 2: Copierea corectă a getter-elor
const original = { a: 1, get dublu() { return this.a * 2; } };
const copieAssign = Object.assign({}, original);
const copieCorecta = Object.defineProperties({}, Object.getOwnPropertyDescriptors(original));
copieAssign.a = 10;
copieCorecta.a = 10;
console.log(copieAssign.dublu, copieCorecta.dublu);
Rezultat
2 20
Greșeli frecvente
- Cauți descriptorul unei metode moștenite (de exemplu
toString) direct pe obiect și primeștiundefined. Caută pe prototip:Object.getPrototypeOf(obiect).
Comenzi înrudite
Object.defineProperty / defineProperties: Definește o proprietate cu control total: dacă poate fi modificată, afișată în bucle sau ștearsă, plus get/set.Object.getOwnPropertyNames / getOwnPropertySymbols: Returnează toate cheile proprii ale unui obiect, inclusiv cele ascunse (neenumerabile) sau de tip Symbol.Object.assign: Copiază proprietățile din unul sau mai multe obiecte sursă într-un obiect țintă.