Skip to main content
Version: 3.13.0

handler.set()

The handler.set() method is a trap for setting a property value.

Syntax

new Proxy(target, {
set(target, property, value, receiver) {
}
});

Parameters

The following parameters are passed to the set() method. this is bound to the handler.

  • target

    • : The target object.
  • property

    • : The name or Symbol of the property to set.
  • value

    • : The new value of the property to set.
  • receiver

    • : The object to which the assignment was originally directed. This is usually the proxy itself. But a set() handler can also be called indirectly, via the prototype chain or various other ways.

      For example, suppose a script does obj.name = "jen", and obj is not a proxy, and has no own property .name, but it has a proxy on its prototype chain. That proxy's set() handler will be called, and obj will be passed as the receiver.

Return value

The set() method should return a boolean value.

  • Return true to indicate that assignment succeeded.
  • If the set() method returns false, and the assignment happened in strict-mode code, a TypeError will be thrown.

Description

The handler.set() method is a trap for setting property value.

Interceptions

This trap can intercept these operations:

  • Property assignment: proxy[foo] = bar and proxy.foo = bar
  • Reflect.set()

Or any other operation that invokes the [[Set]] internal method.

Invariants

If the following invariants are violated, the trap throws a TypeError when invoked.

  • Cannot change the value of a property to be different from the value of the corresponding target object property if the corresponding target object property is a non-writable, non-configurable data property.
  • Cannot set the value of a property if the corresponding target object property is a non-configurable accessor property that has undefined as its [[Set]] attribute.
  • In strict mode, a false return value from the set() handler will throw a TypeError exception.