Maison > interface Web > js tutoriel > Conquer Javascript - Sujets avancés #Proxies et API Reflect

Conquer Javascript - Sujets avancés #Proxies et API Reflect

Patricia Arquette
Libérer: 2024-12-16 20:45:23
original
670 Les gens l'ont consulté

Conquer Javascript - Advanced Topics #Proxies and Reflect API

Introduction

Dans le domaine du développement JavaScript, les API Proxies et Reflect sont des outils puissants qui vous permettent d'intercepter et de modifier les opérations sur les objets. Ces API offrent un moyen flexible et efficace d'étendre et de personnaliser le comportement des objets dans vos applications.

Dans cet article de blog, nous approfondirons les subtilités de Proxies et Reflect, en explorant leurs concepts de base, leurs cas d'utilisation et leurs exemples pratiques.

Que sont les proxys et Reflect ?

Un proxy est un objet qui agit comme intermédiaire pour un autre objet, interceptant les opérations effectuées sur cet objet. Il vous permet de définir un comportement personnalisé pour des opérations telles que l'accès aux propriétés, l'affectation, les appels de fonction, etc.

L'API Reflect, quant à elle, fournit un ensemble de méthodes statiques qui reflètent le comportement des opérateurs de langage. Il vous permet d'accéder à ces opérations par programme, ce qui facilite la mise en œuvre de gestionnaires de proxy personnalisés et le travail avec des objets de manière plus standardisée.

Concepts de base

  • Objet proxy :
    • Crée un objet proxy qui intercepte les opérations sur l'objet cible.
    • Prend deux arguments : target (l'objet à proxy) et handler (un objet contenant des fonctions de piège).
  • Fonctions de piège :
    • Fonctions définies dans l'objet gestionnaire qui sont invoquées lorsque des opérations spécifiques sont effectuées sur le proxy.
    • Les fonctions de piège courantes incluent :
      • get : intercepte l'accès à la propriété.
      • set : intercepte l'affectation de propriété.
      • a : Intercepte les contrôles d'existence de propriété.
      • deleteProperty : intercepte la suppression de propriété.
      • apply : intercepte les appels de fonction.
      • construct : intercepte la création d'objets à l'aide de new.
      • ownKeys : intercepte les appels à Object.getOwnPropertyNames et Object.getOwnPropertySymbols.
      • getOwnPropertyDescriptor : intercepte les appels à Object.getOwnPropertyDescriptor.
      • DefineProperty : intercepte les appels à Object.defineProperty.
      • PreventExtensions : intercepte les appels à Object.preventExtensions.

Cas d'utilisation

Proxies et Reflect offrent une large gamme d'applications en développement JavaScript :

Validation des données

const target = {};
const handler = {
    set(target, property, value) {
        if (typeof value !== 'string') {
            throw new Error('Value must be a string');
        }
        target[property] = value;
        return true;
    }
};

const proxy = new Proxy(target, handler);

proxy.name = 'Alice'; // Valid
proxy.age = 42; // Throws an error
Copier après la connexion
Copier après la connexion

Dans cet exemple, nous créons un proxy qui valide le type de valeurs attribuées à ses propriétés. Si une tentative est faite pour attribuer une valeur autre qu'une chaîne, une erreur est générée.

Mise en cache

const target = {};
const handler = {
    set(target, property, value) {
        if (typeof value !== 'string') {
            throw new Error('Value must be a string');
        }
        target[property] = value;
        return true;
    }
};

const proxy = new Proxy(target, handler);

proxy.name = 'Alice'; // Valid
proxy.age = 42; // Throws an error
Copier après la connexion
Copier après la connexion

Ici, nous créons un proxy qui met en cache les résultats de calculs coûteux. La fonction get trap vérifie si la propriété existe sur l'objet cible. Sinon, il calcule la valeur et la stocke sur l'objet cible. Les accès ultérieurs à la même propriété renverront la valeur mise en cache.

Journalisation et débogage

const target = {};
const handler = {
    get(target, property) {
        if (!target.hasOwnProperty(property)) {
            target[property] = computeValue(property);
        }
        return target[property];
    }
};

const proxy = new Proxy(target, handler);

console.log(proxy.expensiveCalculation); // Caches the result
Copier après la connexion

Cet exemple montre comment enregistrer les accès et les attributions de propriétés. Les pièges get et set enregistrent les messages sur la console chaque fois qu'une propriété est consultée ou modifiée.

Sécurité

const target = {};
const handler = {
    get(target, property) {
        console.log(`Getting property: ${property}`);
        return target[property];
    },
    set(target, property, value) {
        console.log(`Setting property ${property} to ${value}`);
        target[property] = value;
        return true;
    }
};

const proxy = new Proxy(target, handler);

proxy.name = 'Bob';
console.log(proxy.name);
Copier après la connexion

Dans cet exemple, nous créons un proxy qui masque la propriété password. Le piège get intercepte l'accès à la propriété du mot de passe et renvoie '******' au lieu de la valeur réelle.

Comportement des objets personnalisés

const target = {
    username: 'secret',
    password: 'password123'
};

const handler = {
    get(target, property) {
        if (property === 'password') {
            return '******';
        }
        return target[property];
    }
};

const proxy = new Proxy(target, handler);

console.log(proxy.username); // Output: secret
console.log(proxy.password); // Output: ******
Copier après la connexion

Cet exemple montre comment créer un getter personnalisé pour la propriété fullName. Le piège get intercepte l'accès à la propriété fullName et renvoie la concaténation des propriétés firstName et lastName.

API Reflect

L'API Reflect fournit des méthodes statiques qui reflètent le comportement des opérateurs de langage. Il peut être utilisé conjointement avec des proxys pour implémenter un comportement personnalisé et transmettre des opérations à l'objet cible si nécessaire.

const target = {};
const handler = {
    get(target, property) {
        if (property === 'fullName') {
            return `${target.firstName} ${target.lastName}`;
        }
        return target[property];
    }
};

const proxy = new Proxy(target, handler);

proxy.firstName = 'John';
proxy.lastName = 'Doe';

console.log(proxy.fullName); // Output: John Doe
Copier après la connexion

Dans cet exemple, le piège get utilise Reflect.get pour transférer l'accès à la propriété à l'objet cible. Cela nous permet de mettre en œuvre un comportement personnalisé avant ou après l'accès réel à la propriété.

Conclusion

Proxies et Reflect sont des outils puissants qui peuvent améliorer considérablement vos capacités de développement JavaScript. En comprenant leurs concepts fondamentaux et leurs applications pratiques, vous pouvez créer un code plus flexible, plus efficace et plus sécurisé.

N'oubliez pas d'utiliser ces API judicieusement, car elles peuvent introduire de la complexité dans votre code. Cependant, lorsqu'ils sont utilisés efficacement, ils peuvent ouvrir de nouvelles possibilités et élever vos projets JavaScript vers de nouveaux sommets.

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:dev.to
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