„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 09.11.2024
Durchsuche:390

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

Implementierung der Proxy-basierten 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:

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

Beispielimplementierung

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

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");

Usage

  • __ownProp1__: Protokolliert den vorhandenen Eigenschaftswert.
  • __test__: Löst die definierte Methode aus.
  • someName(1, 2)__: Ruft eine nicht vorhandene Methode mit Argumenten auf, die wird vom Hook __noSuchMethod behandelt.
  • __xyz(3, 4)__: Ähnlich wie oben, zeigt aber, dass auch Nicht-Funktionseigenschaften behandelt werden können.
  • __doesNotExist("a ", "b")__: Protokolliert das Fehlen einer Methode/Eigenschaft mit den bereitgestellten Argumenten.
Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729232480 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3