Ce face Reflect
Reflect grupează sub formă de funcții operațiile care altfel se scriu cu operatori: Reflect.get(o, k) este o[k], Reflect.set(o, k, v) este o[k] = v, Reflect.has(o, k) este k in o, Reflect.deleteProperty(o, k) este delete o[k], Reflect.construct(C, args) este new C(...args), iar Reflect.apply(f, this, args) apelează o funcție.
Celelalte corespund metodelor din Object: defineProperty, getOwnPropertyDescriptor, getPrototypeOf, setPrototypeOf, isExtensible, preventExtensions. Diferența importantă: cele care modifică returnează true sau false în loc să arunce erori. Reflect.ownKeys returnează toate cheile proprii, text și Symbol.
Fiecare funcție are același nume și aceiași parametri ca o capcană din Proxy, deci este modul natural de a apela comportamentul implicit dintr-o capcană.
Parametri
| Parametru | Descriere |
|---|---|
tinta |
Obiectul (sau funcția) pe care se lucrează. |
cheie, valoare, ... |
Parametrii operației respective. |
Ce returnează
Rezultatul operației (pentru cele care modifică: true sau false).
Exemple
Exemplul 1: Operatori scriși ca funcții
const carte = { titlu: "Ion", an: 1920 };
console.log(Reflect.get(carte, "titlu"), Reflect.has(carte, "an"));
console.log(Reflect.set(carte, "autor", "Rebreanu"), carte.autor);
console.log(Reflect.deleteProperty(carte, "an"), Reflect.ownKeys(carte));
console.log(Reflect.apply(Math.max, null, [3, 8, 1]));
console.log(Reflect.construct(Date, [2026, 0, 1]).getFullYear());
Rezultat
Ion true
true Rebreanu
true [ 'titlu', 'autor' ]
8
2026
Exemplul 2: true/false în loc de erori
const blocat = Object.freeze({ a: 1 });
console.log(Reflect.defineProperty(blocat, "b", { value: 2 }));
try {
Object.defineProperty(blocat, "b", { value: 2 });
} catch (e) {
console.log(e.constructor.name);
}
console.log(Reflect.isExtensible(blocat), Reflect.preventExtensions({}));
console.log(Reflect.getOwnPropertyDescriptor(blocat, "a"));
console.log(Reflect.getPrototypeOf(blocat) === Object.prototype, Reflect.setPrototypeOf(blocat, null));
Rezultat
false
TypeError
false true
{ value: 1, writable: false, enumerable: true, configurable: false }
true false
Greșeli frecvente
- Scrii
new Reflect().Reflectnu este constructor, ci un obiect cu funcții, caMath. - Dai unei funcții
Reflecto valoare simplă în loc de obiect:Reflect.get("text", "length")aruncăTypeError.
Comenzi înrudite
Proxy / Proxy.revocable: Învelește un obiect și interceptează operațiile pe el: citire, scriere, ștergere, apel.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.