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
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
, wennReflect.isExtensible()
auf dem Zielobjekt nach dem Aufrufen vonhandler.preventExtensions()
false
zurückgibt.
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 Language Specification # sec-proxy-object-internal-methods-and-internal-slots-preventextensions |
Browser-Kompatibilität
BCD tables only load in the browser