Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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 handler.preventExtensions()-Methode ist ein Trap für die [[PreventExtensions]] interne Objektmethode, die von Operationen wie Object.preventExtensions() verwendet wird.

Probieren Sie es aus

const monster = {
  canEvolve: true,
};

const handler = {
  preventExtensions(target) {
    target.canEvolve = false;
    Object.preventExtensions(target);
    return true;
  },
};

const proxy = new Proxy(monster, handler);

console.log(monster.canEvolve);
// Expected output: true

Object.preventExtensions(proxy);

console.log(monster.canEvolve);
// Expected output: false

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 preventExtensions()-Methode muss einen Boolean zurückgeben, der angibt, ob die Operation erfolgreich war oder nicht. Andere Werte werden zu Boolean-Werten umgewandelt.

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

Beschreibung

Abfangvorgänge

Dieser Trap 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() am Zielobjekt false zurückgibt, nachdem handler.preventExtensions() aufgerufen wurde.

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® 2026 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-preventextensions

Browser-Kompatibilität

Siehe auch