ES6’s Reflect object is a single ordinary object that contains methods related to the ECMAScript 6 reflection API.
Key Points
- It’s not a function object
- It does not have a
[[Construct]]internal method (Can’t usenew) - It does not have a
[[Call]]internal method (Can’t invoke as a function)
Reflect Methods
Reflect.get(target, name, [receiver])Reflect.set(target, name, value, [receiver])Reflect.has(target, name)Reflect.apply(target, receiver, args)Reflect.construct(target, args)Reflect.getOwnPropertyDescriptor(target, name)Reflect.defineProperty(target, name, desc)Reflect.getPrototypeOf(target)Reflect.setPrototypeOf(target, newProto)Reflect.deleteProperty(target, name)Reflect.enumerate(target)Reflect.preventExtensions(target)Reflect.isExtensible(target)Reflect.ownKeys(target)
Why Reflect?
The major difference from Object methods is that Reflect methods return meaningful data rather than throwing errors on failure.
Without Reflect
try {
Object.defineProperty(obj, name, desc);
// worked
} catch (e) {
// bombed
}
### With Reflect
javascript
if (Reflect.defineProperty(obj, name, desc)) {
// worked
} else {
// bombed
}
Useful Equivalences
Reflect.has(obj, name)is equivalent to(name in obj)Reflect.deleteProperty(obj, name)is equivalent todelete obj[name]
Both are first-class functions which makes them more composable!
Simplifying apply
Instead of:
Function.prototype.apply.call(fn, obj, args)
You can use:
```javascript
Reflect.apply(fn, obj, args)
#javascript#es6
About Hemanth HM
Hemanth HM is a Sr. Machine Learning Manager at PayPal, Google Developer Expert, TC39 delegate, FOSS advocate, and community leader with a passion for programming, AI, and open-source contributions.