Heim > Web-Frontend > js-Tutorial > Hauptteil

Wie emuliere ich noSuchMethod auf Eigenschaftsebene in JavaScript?

DDD
Freigeben: 2024-10-18 14:29:03
Original
570 Leute haben es durchsucht

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

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

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage