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.

Die Methode handler.preventExtensions() ist eine Falle für die [[PreventExtensions]] objektinterne Methode, die von Operationen wie Object.preventExtensions() verwendet wird.

Probieren Sie es aus

Syntax

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

Parameter

Der folgende Parameter wird an die preventExtensions()-Methode übergeben. this ist an den Handler gebunden.

target

Das Zielobjekt.

Rückgabewert

Die Methode preventExtensions() muss einen Boolean zurückgeben, der angibt, ob die Operation erfolgreich war oder nicht. Andere Werte werden zu Booleans umgewandelt.

Viele Operationen, einschließlich Object.preventExtensions(), werfen einen TypeError, wenn die [[PreventExtensions]]-interne Methode false zurückgibt.

Beschreibung

Abfangen von Operationen

Diese Falle kann folgende Operationen abfangen:

Oder jede andere Operation, die die [[PreventExtensions]] interne Methode aufruft.

Invarianten

Die [[PreventExtensions]]-interne Methode des Proxys wirft einen TypeError, wenn die Handler-Definition eine der folgenden Invarianten verletzt:

  • Das Ergebnis ist nur dann true, wenn Reflect.isExtensible() auf dem Zielobjekt nach dem Aufrufen von handler.preventExtensions() false zurückgibt.

Beispiele

Abfangen von preventExtensions

Der folgende Code fängt Object.preventExtensions() ab.

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

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

Der folgende Code verletzt die Invariante.

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

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

Spezifikationen

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

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch