JavaScript Internals (521 Qs)•Part 8: Modern JavaScript APIs, WeakRef, Proxy & Performance (464 - 521)
What is the Reflect API and when should you use it?
The Reflect API is a built-in object that provides methods for interceptable JavaScript operations. It mirrors many Object methods but with some improvements.
javascript
const obj = { name: 'John', age: 30 };
// Setting properties
Reflect.set(obj, 'city', 'New York');
// Getting properties
console.log(Reflect.get(obj, 'name')); // 'John'
// Checking property existence
console.log(Reflect.has(obj, 'age')); // true
// Deleting properties
Reflect.deleteProperty(obj, 'age');
Advantages over Object methods:
- Returns boolean for success/failure:
javascript
// Object.defineProperty throws on failure
try {
Object.defineProperty(obj, 'prop', { value: 1 });
} catch (e) {}
// Reflect.defineProperty returns boolean
const success = Reflect.defineProperty(obj, 'prop', { value: 1 });
- Works perfectly with Proxy traps:
javascript
const handler = {
set(target, prop, value, receiver) {
console.log(`Setting ${prop} to ${value}`);
return Reflect.set(target, prop, value, receiver);
}
};
const proxy = new Proxy({}, handler);
proxy.name = 'John'; // Logs: Setting name to John
- Function.prototype.apply made simpler:
javascript
// Old way
Function.prototype.apply.call(Math.max, null, [1, 2, 3]);
// Reflect way
Reflect.apply(Math.max, null, [1, 2, 3]); // 3