Heim > Web-Frontend > js-Tutorial > Wie implementiert man kein solches Methodenverhalten für Eigenschaften mithilfe von Proxys in JavaScript?

Wie implementiert man kein solches Methodenverhalten für Eigenschaften mithilfe von Proxys in JavaScript?

Patricia Arquette
Freigeben: 2024-10-18 14:22:02
Original
790 Leute haben es durchsucht

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

Implementieren von Proxy-basiertem noSuchMethod für Eigenschaften

Die Funktion noSuchMethod in JavaScript ermöglicht das Abfangen von Aufrufen nicht vorhandener Methoden . Gibt es jedoch einen ähnlichen Mechanismus für Eigenschaften?

ES6-Proxys zur Rettung

ES6-Proxys bieten die Möglichkeit, den Zugriff auf Eigenschaften anzupassen. Wir können dies nutzen, um ein __noSuchMethod__-ähnliches Verhalten für Eigenschaften zu emulieren:

<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>
Nach dem Login kopieren

Beispielimplementierung

Hier ist ein Beispiel für die Verwendung des Proxys zur Implementierung einer „Dummy“-Klasse, die unbekannte Eigenschaften verarbeiten kann :

<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>
Nach dem Login kopieren

Verwendung

  • __ownProp1__: Protokolliert den vorhandenen Eigenschaftswert.
  • __test__: Löst die definierte Methode aus.
  • someName(1, 2)__: Ruft eine nicht vorhandene Methode mit Argumenten auf, die vom Hook __noSuchMethod verarbeitet wird.
  • __xyz(3, 4)__: Ähnlich wie oben, zeigt aber, dass dies nicht der Fall ist -Funktionseigenschaften können ebenfalls behandelt werden.
  • __doesNotExist("a", "b")__: Protokolliert das Fehlen einer Methode/Eigenschaft mit den bereitgestellten Argumenten.

Das obige ist der detaillierte Inhalt vonWie implementiert man kein solches Methodenverhalten für Eigenschaften mithilfe von Proxys in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage