Maison > interface Web > js tutoriel > Comment implémenter un comportement de méthode sans type pour les propriétés à l'aide de proxys en JavaScript ?

Comment implémenter un comportement de méthode sans type pour les propriétés à l'aide de proxys en JavaScript ?

Patricia Arquette
Libérer: 2024-10-18 14:22:02
original
797 Les gens l'ont consulté

How to Implement No Such Method Behavior for Properties using Proxies in JavaScript?

Implémentation de noSuchMethod basée sur un proxy pour les propriétés

La fonctionnalité noSuchMethod en JavaScript permet d'intercepter les appels à des méthodes inexistantes . Cependant, existe-t-il un mécanisme similaire pour les propriétés ?

Les proxys ES6 à la rescousse

Les proxys ES6 offrent la possibilité de personnaliser l'accès aux propriétés. Nous pouvons l'utiliser pour émuler un comportement de type __noSuchMethod__ pour les propriétés :

<code class="javascript">function enableNoSuchMethod(obj) {
  return new Proxy(obj, {
    get(target, p) {
      if (p in target) {
        return target[p];
      } else if (typeof target.__noSuchMethod__ == "function") {
        return function(...args) {
          return target.__noSuchMethod__.call(target, p, args);
        };
      }
    }
  });
}</code>
Copier après la connexion

Exemple d'implémentation

Voici un exemple d'utilisation du proxy pour implémenter une classe "Dummy" qui peut gérer des propriétés inconnues :

<code class="javascript">function Dummy() {
  this.ownProp1 = "value1";
  return enableNoSuchMethod(this);
}

Dummy.prototype.test = function() {
  console.log("Test called");
};

Dummy.prototype.__noSuchMethod__ = function(name, args) {
  console.log(`No such method ${name} called with ${args}`);
};

var instance = new Dummy();
console.log(instance.ownProp1);
instance.test();
instance.someName(1, 2);
instance.xyz(3, 4);
instance.doesNotExist("a", "b");</code>
Copier après la connexion

Usage

  • __ownProp1__ : enregistre la valeur de la propriété existante.
  • __test__ : déclenche la méthode définie.
  • someName(1, 2)__ : appelle une méthode inexistante avec des arguments, qui est gérée par le hook __noSuchMethod.
  • __xyz(3, 4)__ : similaire à ci-dessus, mais démontre que non -les propriétés de fonction peuvent également être gérées.
  • __doesNotExist("a", "b")__ : enregistre l'absence d'une méthode/propriété avec les arguments fournis.

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
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