2016-03-29 8 views
0

In der Vergangenheit hatte JS Object.prototype .__ noSuchMethod __ für die Behandlung nicht existierender Methoden, so dass Sie Methoden als Nachrichten nach OOP verwenden konnten.Nicht gefunden Methode Emulation über Proxy

Leider ist es jetzt veraltet. Ersatz ist Proxy-Objekt. Wenden Sie jedoch Handlerfangaufrufe nur auf Funktionen an, nicht auf Objekte, sodass Sie keine nicht vorhandenen Methoden abfangen können.

Sie können den get-Handler verwenden, aber Sie wissen nicht, ob Sie eine Funktion, einen Wert oder nichts zurückgeben und etwas tun sollten. Sie haben keinen Kontext für den Namenszugriff.

Also, irgendwelche Ideen, wie man mit nicht vorhandenen Methoden ohne explizite Überprüfung umgehen?

+0

, die nur in Firefox –

+0

unterstützt Sie tun, um die Namen der Eigenschaft von dem Handler holen. Du solltest ein Beispiel von dem, was du versucht hast, posten –

+0

Juan Mendes, bitte lies meinen Beitrag richtig. Ich kann den Namen über get erhalten, aber ich weiß nicht, ob jemand versucht hat, auf Eigenschaft oder Anrufmethode zuzugreifen. Ich vermisse den Kontext des Namenszugriffs. – Seraph

Antwort

1

Sie können nicht das genaue Verhalten von Object.prototype.__ noSuchMethod __ bekommen, aber Sie können ziemlich nah kommen. Sie würden wissen, welche Eigenschaften überschrieben werden sollen, daher sollte etwas wie das Folgende funktionieren.

Ohne ein einfaches Beispiel, wie Sie es verwenden, ist es schwer, etwas Sinnvolleres vorzuschlagen. Das heißt, Fragen sollten immer Code zeigen.

var obj = { 
 
    b: 1, 
 
    c: 2 
 
}; 
 

 
var proxy = new Proxy(obj, { 
 
    get: function(target, property, receiver) { 
 
    if (property == 'addBC') { 
 
     return function() { 
 
      return target.b + target.c; 
 
     } 
 
    } 
 
    
 
    return target[property]; 
 
    } 
 
}) 
 

 

 
console.log('proxy.addBC() => ' , proxy.addBC()); // 3 
 

 
console.log(proxy.b); // 1 
 

 
console.log(proxy.noexist); // undefined 
 

 
try { 
 
    console.log(proxy.noexist()); 
 
} catch(e) { 
 
    console.log('error running no exist function') 
 
}

+0

Ich habe kein JS-System auf "Messaging" gebaut, so kann ich Ihnen Code nicht zeigen. Diese Frage war nur informativ, weil Proxy-Objekte manchmal der beste Weg sind, etwas in der dynamischen OOP-Sprache zu tun. – Seraph

Verwandte Themen