Maison > interface Web > js tutoriel > Comment l'objet proxy de JavaScript peut-il être utilisé pour implémenter des getters et setters dynamiques ?

Comment l'objet proxy de JavaScript peut-il être utilisé pour implémenter des getters et setters dynamiques ?

Patricia Arquette
Libérer: 2024-11-02 22:10:03
original
888 Les gens l'ont consulté

How can JavaScript's Proxy Object be used to implement dynamic getters and setters?

Implémentation de getters/setters dynamiques en JavaScript

Comprendre comment créer des getters et des setters pour des propriétés prédéfinies en JavaScript est un concept courant. Cependant, étendre cette fonctionnalité pour englober la gestion dynamique de tout nom de propriété qui n'est pas explicitement défini pose un défi unique.

Fonctionnalité Getter et Setter dynamique en PHP

PHP utilise les méthodes magiques __get() et __set() pour définir dynamiquement les comportements getter et setter pour n'importe quelle propriété. Cela fournit une approche pratique et flexible pour manipuler les propriétés à la volée.

Le proxy JavaScript à la rescousse

Depuis ES2015, JavaScript a introduit les proxys, qui changent la donne pour implémentation dynamique des getters et setters. Les proxys permettent la création d'objets qui servent de façades à d'autres objets, permettant l'interception et la modification de l'accès aux propriétés.

Exemple d'utilisation de proxys pour les getters/setters dynamiques

Considérons l'exemple suivant, où toutes les valeurs de propriété inexistantes renverront "manquant" et les valeurs de propriété de chaîne seront transformées en majuscules lors de la récupération :

<code class="javascript">"use strict";
if (typeof Proxy == "undefined") {
    throw new Error("This browser doesn't support Proxy");
}
let original = {
    example: "value",
};
let proxy = new Proxy(original, {
    get(target, name, receiver) {
        if (Reflect.has(target, name)) {
            let rv = Reflect.get(target, name, receiver);
            if (typeof rv === "string") {
                rv = rv.toUpperCase();
            }
            return rv;
        }
        return "missing";
      }
});</code>
Copier après la connexion

Test du comportement dynamique

console.log(original.example = ${original.example}); // "original.example = valeur"
console.log(proxy.example = ${proxy.example}); // "proxy.example = VALUE"
console.log(proxy.unknown = ${proxy.unknown}); // "proxy.unknown = manquant"
original.example = "mis à jour";
console.log(original.example = ${original.example}); // "original.example = mis à jour"
console.log(proxy.example = ${proxy.example}); // "proxy.example = UPDATED"

Comme démontré, le proxy intercepte les accès aux propriétés et applique le comportement défini pour les propriétés inexistantes ("manquantes") et les propriétés de chaîne (conversion en majuscules). Il permet également de modifier l'objet d'origine, le proxy reflétant les modifications apportées.

Compatibilité des navigateurs

Les proxys sont pris en charge dans tous les principaux navigateurs modernes, notamment Chrome, Firefox. , Edge, Safari et Internet Explorer 11.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal