Reflect în JavaScript

Funcții pentru operațiile de bază pe obiecte (citire, scriere, ștergere, chei), cu aceleași nume ca în Proxy.

Sintaxă
Reflect.get(tinta, cheie)
Reflect.set(tinta, cheie, valoare)
Reflect.has(tinta, cheie)
Reflect.ownKeys(tinta)
...

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(). Reflect nu este constructor, ci un obiect cu funcții, ca Math.
  • Dai unei funcții Reflect o valoare simplă în loc de obiect: Reflect.get("text", "length") aruncă TypeError.

Comenzi înrudite