Heim  >  Artikel  >  Web-Frontend  >  Wie emuliere ich noSuchMethod auf Eigenschaftsebene in JavaScript?

Wie emuliere ich noSuchMethod auf Eigenschaftsebene in JavaScript?

DDD
DDDOriginal
2024-10-18 14:29:03478Durchsuche

How to Emulate Property-Level noSuchMethod in JavaScript?

Emulieren von noSuchMethod auf Eigenschaftsebene in JavaScript

Die Funktion noSuchMethod in bestimmten JavaScript-Implementierungen, wie z. B. Rhino und SpiderMonkey ermöglicht die Handhabung nicht implementierter Methoden. Eine ähnliche Funktion ist jedoch nicht nativ für Eigenschaften verfügbar.

ECMAScript 6-Proxys zur Rettung

ECMAScript 6 führte Proxys ein, die einen Mechanismus zum Anpassen grundlegender Vorgänge, einschließlich des Eigenschaftszugriffs, bereitstellen. Durch die Nutzung von Proxy-Traps können wir das gewünschte Verhalten für Eigenschaftssuchen mithilfe von __noSuchMethod__ emulieren.

Lösung mit ES6-Proxys

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

Beispielverwendung

Betrachten Sie das folgende Beispiel:

<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);
instance.test();
instance.someName(1, 2);
instance.xyz(3, 4);
instance.doesNotExist("a", "b");</code>

Dieser Code protokolliert die folgende Ausgabe und demonstriert die noSuchMethod-Emulation für Eigenschaften:

value1
Test called
No such method someName called with 1,2
No such method xyz called with 3,4
No such method doesNotExist called with a,b

Das obige ist der detaillierte Inhalt vonWie emuliere ich noSuchMethod auf Eigenschaftsebene in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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