Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2016.
Un objet Proxy permet de créer un intermédiaire pour un autre objet et qui peut intercepter et redéfinir certaines opérations fondamentales pour lui.
Un objet Proxy permet de créer un objet qui peut être utilisé à la place de l'objet original en redéfinissant certaines opérations fondamentales comme l'accès, la modification et la définition de propriétés. Les objets Proxy sont généralement utilisés pour journaliser l'accès aux propriétés, valider, formater ou nettoyer des valeurs saisies, etc.
La création d'un objet Proxy se fait avec deux paramètres :
cibleL'objet original devant lequel on veut placer un intermédiaire
gestionnaireUn objet qui définit les opérations qui seront interceptées et comment celles-ci seront redéfinies.
Dans l'exemple qui suit, on a une cible simple avec deux propriétés et un gestionnaire encore plus simple, sans propriété.
Le gestionnaire étant vide, le proxy se comporte à l'identique de la cible :
Pour adapter le proxy, on définit des fonctions sur le gestionnaire :
Ici, on a fourni une implémentation du gestionnaire get(), qui intercepte les tentatives d'accès aux propriétés de la cible.
Les fonctions d'un gestionnaire sont parfois appelées des trappes, car les appels originaux tombent dans ces trappes. Celle qui est utilisée dans gestionnaire2 redéfinit l'accès pour toutes les propriétés :
Avec Reflect, on peut rediriger certains accesseurs vers leur comportement original et en redéfinir d'autres :
Crée un nouvel objet Proxy.
Crée un objet Proxy révocable.
Dans ce court exemple, on renvoie le nombre 37 comme valeur par défaut lorsque la propriété nommée n'est pas présente dans l'objet. Pour cela, on utilise le gestionnaire correspondant à get().
Dans cet exemple, le proxy transfère toutes les opérations qui sont appliquées à l'objet cible.
On notera que bien que ceci fonctionne pour les objets JavaScript construits dans les scripts, ça ne fonctionne pas pour les objets natifs de l'environnement (comme les éléments du DOM dans un navigateur).
En utilisant un Proxy, on peut simplement valider les valeurs passées à un objet. Dans cet exemple, on utilise le gestionnaire correspondant à set().
En utilisant une fonction proxy, on peut étendre un constructeur avec un nouveau constructeur. Dans cet exemple, on utilise les gestionnaires correspondants à construct() et apply().
Dans cet exemple, on utilise Proxy afin qu'un attribut alterne entre deux éléments différents : si on définit l'attribut sur un élément, il sera retiré de l'autre.
On crée un objet vue qui est un proxy pour l'objet avec une selected. Le gestionnaire du proxy définit la fonction set().
Lorsqu'on affecte un élément HTML à vue.selected, l'attribut 'aria-selected' de l'élément est placé à true. Si on affecte ensuite un autre élément à vue.selected, ce nouvel élément aura l'attribut 'aria-selected' défini à true et l'élément précédent verra son attribut 'aria-selected' automatiquement défini à false.
Dans l'exemple qui suit, le proxy produits évalue la valeur passée et la convertit en tableau si besoin. L'objet prend également en charge la propriété supplémentaire dernierNavigateur à la fois comme accesseur et mutateur.
Dans cet exemple, ce proxy étend le tableau avec des fonctionnalités supplémentaires. Ici, on définit des propriétés sans utiliser Object.defineProperties(). Cet exemple pourrait être adapté pour trouver la ligne d'un tableau à partir d'une de ces cellules (la cible serait alors table.rows).
Pour illustrer l'ensemble des trappes, on tente de « proxifier » un objet non natif : l'objet global docCookies créé grâce à cet exemple.
| ECMAScript® 2027 Language Specification # sec-proxy-objects |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 17 déc. 2024 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.