Es ist ziemlich einfach.
Bei der ersten gibt es eine veraltete arguments.callee
- eine Referenz auf die aufgerufene Funktion. Wenn Sie einen Verweis auf Ihre Funktion haben, können Sie deren textuelle Darstellung leicht abrufen. Drittens, wenn Sie Ihre Funktion als Konstruktor aufrufen, können Sie auch einen Link über yourObject.constructor haben. NB: Die erste Lösung ist veraltet, wenn Sie sie also nicht verwenden können, müssen Sie auch über Ihre App-Architektur nachdenken. Wenn Sie keine exakten Variablennamen benötigen, verwenden Sie einfach innerhalb einer Funktion eine interne Variable arguments
ohne jegliche Magie.
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments/callee
Alle werden toString aufrufen und durch re ersetzen, so dass wir eine Hilfskraft erstellen können:
// getting names of declared parameters
var getFunctionParams = function (func) {
return String(func).replace(/[^\(]+\(([^\)]*)\).*/m, '$1');
}
Einige Beispiele:
// Solution 1. deprecated! don't use it!
var myPrivateFunction = function SomeFuncName (foo, bar, buz) {
console.log(getFunctionParams(arguments.callee));
};
myPrivateFunction (1, 2);
// Solution 2.
var myFunction = function someFunc (foo, bar, buz) {
// some code
};
var params = getFunctionParams(myFunction);
console.log(params);
// Solution 3.
var cls = function SuperKewlClass (foo, bar, buz) {
// some code
};
var inst = new cls();
var params = getFunctionParams(inst.constructor);
console.log(params);
Viel Spaß mit JS!
UPD: Jack Allan wurde eine etwas bessere Lösung angeboten. GJ Jack!