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 Zielobjektfalse
zurü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> |
Browser-Kompatibilität
Loading…