Hemanth's Scribes

javascript

ES6 Reflect API

Author Photo

Hemanth HM

Thumbnail

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 use new)
  • 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 to delete 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
Author Photo

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.