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 Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2016 browserübergreifend verfügbar.

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

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

Browser-Kompatibilität

Siehe auch