Maison  >  Article  >  interface Web  >  Les proxys ES6 peuvent-ils émuler la fonctionnalité noSuchMethod pour les propriétés en JavaScript ?

Les proxys ES6 peuvent-ils émuler la fonctionnalité noSuchMethod pour les propriétés en JavaScript ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-18 14:19:03989parcourir

Can ES6 Proxies Emulate the noSuchMethod Feature for Properties in JavaScript?

Émulation de noSuchMethod pour les propriétés en JavaScript avec les proxys ES6

La fonctionnalité noSuchMethod permet implémenter un comportement personnalisé lors de l'accès à des méthodes inexistantes dans certaines implémentations JavaScript. Une fonctionnalité similaire peut être obtenue pour les propriétés utilisant des proxys ES6.

Utilisation de proxys ES6

Les objets proxy offrent un comportement personnalisé pour les opérations fondamentales telles que la recherche de propriétés. En définissant des pièges sur l'accès à la propriété, le comportement de noSuchMethod peut être émulé :

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

Utilisation

Par exemple :

<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}`);
  return;
};

var instance = new Dummy();
console.log(instance.ownProp1); // value1
instance.test(); // Test called
instance.someName(1, 2); // No such method someName called with [1, 2]
instance.xyz(3, 4); // No such method xyz called with [3, 4]
instance.doesNotExist("a", "b"); // No such method doesNotExist called with ["a", "b"]</code>

Cet exemple illustre que le proxy intercepte l'accès aux propriétés et, en cas d'inexistence, délègue à l'implémentation noSuchMethod, permettant un comportement personnalisé pour les propriétés qui n'ont pas été explicitement définies.

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!

Déclaration:
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