Ich versuche, eine mehr Klassen-ähnliche Vererbung Modell mit JavaScript nachzuahmen, aber ich habe ein Problem, wenn Sie versuchen, dies mit der Idee von JavaScript Proxies zu mischen.Proxy-Nutzung vermasselt function.caller.name
Um eine lange Geschichte kurz, in der Definition meiner Klasse Typ mache ich eine Funktion _super haben() mit der Semantik „, wenn Methode X auf einer Instanz der Unterklasse B ruft _super(), rufen Sie die Methode X auf Eltern Klasse A ":
Class A
.X() {...}
^
|
|
Class B
.X() {..._super(); ...}
ich auf dem Funktion .caller.name Ansatz verlasse mir den Namen der rufenden Methode zu erhalten (in unserem Beispiel‚X‘). Dann rufe ich es in der Elternklasse an.
const Class = {
...
_super: function _super(...args) {
// Get a handle on the function in which this function is invoked:
const callerMethod = _super.caller.name;
...
},
...
};
Dies funktioniert ordnungsgemäß. Die Probleme begannen, als ich ein Proxy-Objekt oberhalb meines Klassenkonstrukts hinzufügte (ich möchte einige Methodenaufrufe abfangen).
function traceMethodCalls(obj) {
const handler = {
get(target, propKey, receiver) {
const origMethod = target[propKey];
return function (...args) {
// Do stuff
};
},
};
return new Proxy(obj, handler);
}
Nun Funktion .caller im _super() -Methode ist die anonyme Funktion in dem Proxy-Handler-Objekt (natürlich ...), und dies vermasselt den Programmablauf auf.
Meine Frage: Gibt es eine Möglichkeit, dies zu umgehen? Oder anders darüber nachdenken? Oder muss ich den Ansatz * .caller.name insgesamt aufgeben?
Danke! Ja, ich muss meinen Ansatz vielleicht überdenken. – Cristina