Maison >interface Web >js tutoriel >Les proxys ES6 peuvent-ils émuler la fonctionnalité noSuchMethod pour les propriétés en 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!