Labs ICT
Pro Login

Reflect

The Reflect API

Reflect is a built-in object that provides methods for interceptable JavaScript operations. It pairs perfectly with Proxy — forward traps to Reflect for default behavior.

const obj = { a: 1, b: 2 };

console.log(Reflect.has(obj, "a"));
console.log(Reflect.ownKeys(obj));
console.log(Reflect.get(obj, "b"));

Reflect.set(obj, "c", 3);
console.log(obj.c);
Try it Yourself →

Forwarding Traps with Reflect

Inside Proxy handlers, delegate to Reflect methods to preserve default behavior while adding custom logic.

const handler = {
  get(target, prop, receiver) {
    console.log("Accessed:", prop);
    return Reflect.get(target, prop, receiver);
  },
  set(target, prop, value, receiver) {
    console.log("Set:", prop, "=", value);
    return Reflect.set(target, prop, value, receiver);
  }
};

const data = { x: 10 };
const proxy = new Proxy(data, handler);

proxy.x;
proxy.y = 20;
console.log(data);
Try it Yourself →

Reflect Methods

Reflect methods mirror Proxy traps: apply, construct, defineProperty, deleteProperty, getPrototypeOf, and more.

function greet(greeting) {
  return greeting + ", " + this.name;
}

const person = { name: "Alice" };
console.log(Reflect.apply(greet, person, ["Hello"]));

const now = Reflect.construct(Date, [2025, 0, 1]);
console.log(now.toDateString());

const target = {};
Reflect.defineProperty(target, "key", { value: 42 });
console.log(target.key);
Try it Yourself →