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
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, wennReflect.isExtensible()am Zielobjektfalsezurückgibt, nachdemhandler.preventExtensions()aufgerufen wurde.
Beispiele
>Abfangen von preventExtensions
Der folgende Code fängt Object.preventExtensions() ab.
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.
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> |