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