Für das jemand sehen, ist diese Frage ähnlich der folgenden:Get Name der Klasse Methode in Typoskript
How do I get the name of an object's type in JavaScript?
Get an object's class name at runtime in TypeScript
aber es unterscheidet sich in einigen Grüßen ist.
Ich bin auf der Suche nach dem Namen der Methode, die zu einer Klasse gehört und speichern Sie es in einer Variablen in TypeScript/JavaScript.
Werfen Sie einen Blick auf die folgende Einstellung:
class Foo {
bar(){
// logic
}
}
Die oben gilt Typoskript, und ich möchte eine Methode in einer anderen Klasse erstellen, die mir den Namen des bar()
Methode zurückkehren, dh "bar"
zB :
class ClassHelper {
getMethodName(method: any){
return method.name; // per say
}
}
ich würde dann die ClassHelper
in der folgenden Art und Weise zu verwenden, um die Lage sein mag:
var foo = new Foo();
var barName = ClassHelper.getMethodName(foo.bar); // "bar"
Ich habe an vielen Stellen sah, schlagen einige folgendes mit:
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec(obj.toString());
var result = results && results.length > 1 && results[1];
aber nicht als meine Methoden nicht beginnen mit function
ein weiterer Vorschlag war:
public getClassName() {
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec(this["constructor"].toString());
return (results && results.length > 1) ? results[1] : "";
}
Dies gibt jedoch nur den Klassennamen zurück, und beim Lesen von Posts scheint es mit constructor
unzuverlässig zu sein.
Auch, wenn ich den Code debuggt haben einige dieser Methoden verwenden, wie dies in der Methode übergeben: ClassHelper.getMethodName(foo.bar);
im Parameter führen wird übergeben wird, wenn die Methode nimmt man, zum Beispiel:
class Foo {
bar(param: any){
// logic
}
}
var foo = new Foo();
var barName = ClassHelper.getMethodName(foo.bar); // results in param getting passed through
I Ich habe schon eine Weile damit zu kämpfen. Wenn jemand irgendwelche Informationen darüber hat, wie ich das lösen kann, wäre das sehr zu begrüßen.
Mein .toString()
über die Methode in gibt diese übergeben: statt
.toString() = "function (param) { // code }"
:
.toString() = "function bar(param) { // code }"
und nach MDN ist es nicht sollte entweder:
That toString dekompiliert die Funktion und die zurückgegebene Zeichenfolge enthält das Funktionsschlüsselwort, die Argumentliste, geschweifte Klammern und t Die Quelle des Funktionskörpers.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/toString#Description
Diese Lösung kann einen Nachteil haben, wenn alte Browser und reservierte Schlüsselwörter beteiligt sind, da das Lambda möglicherweise zu 'foo [" default "]' compiliert. Ansonsten sieht das gut aus. –
Sie könnten die Lambda-Funktion in eine reguläre Funktion ändern, ich glaube: 'function() {return foo.bar; } ' – Colum