handler.getPrototypeOf()

La méthode handler.getPrototypeOf() représente une trappe pour la méthode interne [[GetPrototypeOf]].

Syntaxe

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 :

  • getPrototypeOf doit renvoyer un objet ou null.
  • Si la cible n'est pas extensible, Object.getPrototypeOf(proxy) doit renvoyer la même valeur que Object.getPrototypeOf(cible).

Exemples

Utilisation simple

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

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

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

Spécification État Commentaires
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de '[[GetPrototypeOf]]' dans cette spécification.
Standard Définition initiale.
ECMAScript Latest Draft (ECMA-262)
La définition de '[[GetPrototypeOf]]' dans cette spécification.
Projet  

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung InternetNode.js
getPrototypeOfChrome Support complet 49Edge Aucun support NonFirefox Support complet 49IE Aucun support NonOpera Support complet 36Safari Aucun support NonWebView Android Support complet 49Chrome Android Support complet 49Firefox Android Support complet 49Opera Android Support complet 36Safari iOS Aucun support NonSamsung Internet Android Support complet Ouinodejs Support complet 6.0.0

Légende

Support complet  
Support complet
Aucun support  
Aucun support

Voir aussi