handler.preventExtensions()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

The handler.preventExtensions() method is a trap for the [[PreventExtensions]] object internal method, which is used by operations such as Object.preventExtensions().

Try it

Syntax

js
new Proxy(target, {
  preventExtensions(target) {
  }
})

Parameters

The following parameter is passed to the preventExtensions() method. this is bound to the handler.

target

The target object.

Return value

The preventExtensions() method must return a Boolean indicating whether or not the operation was successful. Other values are coerced to booleans.

Many operations, including Object.preventExtensions(), throw a TypeError if the [[PreventExtensions]] internal method returns false.

Description

Interceptions

This trap can intercept these operations:

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

Invariants

The proxy's [[PreventExtensions]] internal method throws a TypeError if the handler definition violates one of the following invariants:

  • The result is only true if Reflect.isExtensible() on the target object returns false after calling handler.preventExtensions().

Examples

Trapping of preventExtensions

The following code traps Object.preventExtensions().

js
const p = new Proxy(
  {},
  {
    preventExtensions(target) {
      console.log("called");
      Object.preventExtensions(target);
      return true;
    },
  },
);

console.log(Object.preventExtensions(p));
// "called"
// false

The following code violates the invariant.

js
const p = new Proxy(
  {},
  {
    preventExtensions(target) {
      return true;
    },
  },
);

Object.preventExtensions(p); // TypeError is thrown

Specifications

Specification
ECMAScript Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-preventextensions

Browser compatibility

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
preventExtensions

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

See also