351 Stimmen

Wie kann man die Namen/Werte von Funktionsparametern dynamisch ermitteln?

Gibt es eine Möglichkeit, die Namen der Funktionsparameter einer Funktion dynamisch abzurufen?

Nehmen wir an, meine Funktion sieht wie folgt aus:

function doSomething(param1, param2, .... paramN){
   // fill an array with the parameter name and value
   // some other code 
}

Nun, wie würde ich eine Liste der Parameternamen und ihre Werte in ein Array von innerhalb der Funktion erhalten?

0voto

Alex Yaroshevich Punkte 690

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!

-1voto

Funktion Parameter String-Wert Bild dynamisch von JSON . Da item.product_image2 eine URL-Zeichenfolge ist, müssen Sie sie in Anführungszeichen setzen, wenn Sie changeImage innerhalb des Parameters aufrufen.

Meine Funktion Onclick

items+='<img src='+item.product_image1+' id="saleDetailDivGetImg">';
items+="<img src="+item.product_image2+"  onclick='changeImage(\""+item.product_image2+"\");'>";

Meine Funktion

<script type="text/javascript">
function changeImage(img)
 {
    document.getElementById("saleDetailDivGetImg").src=img;
    alert(img);
}
</script>

-18voto

Harun Or Rashid Punkte 274

Manuell versuchen:

function something(arg1, arg2) {
  console.log ( arg1 + arg2 );
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X