handler.getPrototypeOf()
Baseline
Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis janvier 2020.
La méthode handler.getPrototypeOf() représente une trappe pour la méthode interne [[GetPrototypeOf]].
Exemple interactif
const monster1 = {
eyeCount: 4,
};
const monsterPrototype = {
eyeCount: 2,
};
const handler = {
getPrototypeOf(target) {
return monsterPrototype;
},
};
const proxy1 = new Proxy(monster1, handler);
console.log(Object.getPrototypeOf(proxy1) === monsterPrototype);
// Expected output: true
console.log(Object.getPrototypeOf(proxy1).eyeCount);
// Expected output: 2
Syntaxe
js
var p = new Proxy(obj, {
getPrototypeOf(cible) {
...
}
});
Paramètres
Le paramètre suivant est passé à la méthode getPrototypeOf. this est lié au gestionnaire.
cible-
L'objet cible.
Valeur de retour
La méthode getPrototypeOf doit renvoyer un objet ou null.
Description
>Interceptions
Cette trappe permet d'intercepter les opérations suivantes :
Invariants
Si les invariants suivant ne sont pas respectés, le proxy renverra une exception TypeError :
getPrototypeOfdoit renvoyer un objet ounull.- Si la
ciblen'est pas extensible,Object.getPrototypeOf(proxy)doit renvoyer la même valeur queObject.getPrototypeOf(cible).
Exemples
>Utilisation simple
js
var obj = {};
var proto = {};
var gestionnaire = {
getPrototypeOf(cible) {
console.log(cible === obj); // true
console.log(this === gestionnaire); // true
return proto;
},
};
var p = new Proxy(obj, gestionnaire);
console.log(Object.getPrototypeOf(p) === proto); // true
Cinq façons de déclencher la trappe getPrototypeOf
js
var obj = {};
var p = new Proxy(obj, {
getPrototypeOf(cible) {
return Array.prototype;
},
});
console.log(
Object.getPrototypeOf(p) === Array.prototype, // true
Reflect.getPrototypeOf(p) === Array.prototype, // true
p.__proto__ === Array.prototype, // true
Array.prototype.isPrototypeOf(p), // true
p instanceof Array, // true
);
Deux types d'exceptions
js
var obj = {};
var p = new Proxy(obj, {
getPrototypeOf(cible) {
return "toto";
},
});
Object.getPrototypeOf(p); // TypeError : "toto" n'est pas un objet ou null
var obj = Object.preventExtensions({});
var p = new Proxy(obj, {
getPrototypeOf(cible) {
return {};
},
});
Object.getPrototypeOf(p); // TypeError : on attend la même valeur pour le prototype
Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-proxy-object-internal-methods-and-internal-slots-getprototypeof> |