'Is there a functional difference between `Reflect.get()` and regular property access in a `Proxy` handler?

MDN's article on Proxy displays two ways to write get() handlers:

const first = new Proxy(target, {
  get(target, property, receiver) {
    return target[property];
  }
});

const second = new Proxy(target, {
  get(target, property, receiver) {
    return Reflect.get(...arguments);
  }
});

As far as I've tested, both seem to work as expected for simple cases.

const target = {
  foo: 42
};

const first = new Proxy(target, {
  get(target, property, receiver) {
    return target[property];
  }
});

const second = new Proxy(target, {
  get(target, property, receiver) {
    return Reflect.get(...arguments);
  }
});

console.log(first.foo);
console.log(second.foo);

Is there a functional difference between the two options? Is there a setup in which one approach works, but the other fails?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source