2010-10-14 9 views
5

Wie mache ich das?Javascript eval() für Funktion mit Argument

function myUIEvent() { 
    var iCheckFcn = "isInFavorites"; 
    var itemSrc = ui.item.find("img").attr("src"); 

    if (eval(iCheckFcn(itemSrc))) { alert("it's a favorite"); } 

function isInFavorites(url) { return true; } // returns boolean 
+2

Sie könnten beginnen möchten durch syntaktisch gültigen Code schreiben. Du verpasst irgendwo dort eine schließende Klammer. –

Antwort

6

nicht eval(), zunächst einmal anwenden.

function myUIEvent() { 
    var iCheckFcn = isInFavorites; 
    var itemSrc = ui.item.find("img").attr("src"); 

    if (iCheckFcn(itemSrc)) { alert("it's a favorite"); } 
} 

Funktionen sind Objekte, und Sie können einen Verweis auf eine Funktion zu einer Variablen zuweisen. Sie können diese Referenz dann verwenden, um die Funktion aufzurufen.

+0

Prost! Danke auch für die Erklärung. – FFish

+0

Ich denke, dass der Punkt der Frage verfehlt. In Ihrem Beispiel wird das var iCheckFcn immer noch an den fest codierten Wert isInFaorites gebunden. Die Frage ausdrücklich gefragt, wie die iCheckFcn mit dem Namen der Funktion nicht fest einprogrammiert dynamisch gesetzt zu tun, sondern übergab als Variable (in seinem Beispiel genannt var iCheckFcn in diesem Fall eine hartcodierte Zeichenfolge zugewiesen wird, sondern ein dynamisch in String übergeben werden konnte. –

+0

@PaulGorbas merkt man, dass das über 6 Jahre alt ist, oder? Referenzen auf Funktionen können als Parameter übergeben werden, und 'eval()' ist immer noch nicht nötig. – Pointy

2

Der beste Weg ist es, was Zipfel beschrieben, oder alternativ könnten Sie einfach tun:

if (window[iCheckFcn](itemSrc)) { 
    alert("it's a favorite"); 
}; 
0

Wenn Sie in AngularJS Umgebung sind, es ist nur so einfach:

$rootScope.calculate = function(param1,param2) 
{ 
    console.log(param1+param2); 
} 

var func = '$rootScope.calculate'; 
eval(func)(1,2); //---> 3