2010-10-14 42 views
5

Làm cách nào để thực hiện việc này?Javascript eval() cho hàm có đối số

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

Bạn có thể muốn bắt đầu bằng cách viết mã hợp lệ. Bạn đang thiếu một cú đúp đóng ở đâu đó trong đó. –

Trả lời

6

Không sử dụng eval(), trước hết.

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

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

Chức năng là đối tượng và bạn có thể gán tham chiếu đến hàm cho bất kỳ biến nào. Sau đó, bạn có thể sử dụng tham chiếu đó để gọi hàm.

+0

chúc mừng! cảm ơn cho lời giải thích quá. – FFish

+0

Tôi nghĩ rằng đã bỏ lỡ điểm của câu hỏi. Ví dụ của bạn vẫn hardcodes var iCheckFcn với giá trị hardcoded làInFaorites. Câu hỏi đặc biệt hỏi làm thế nào để đặt iCheckFcn động với tên của hàm NOT hardcoded nhưng được truyền vào như một biến (trong ví dụ của anh ta gọi là var iCheckFcn được gán trong trường hợp này là một chuỗi cứng nhưng có thể là một chuỗi được truyền động trong chuỗi –

+0

@PaulGorbas bạn nhận ra rằng đây là hơn 6 tuổi, phải không? Dù sao, tham chiếu đến các chức năng có thể được thông qua như các tham số, và vẫn không cần phải có 'eval()'. – Pointy

2

Cách tốt nhất là gì chóp mô tả, hoặc cách khác bạn chỉ có thể làm điều này:

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

Nếu bạn đang ở trong AngularJS môi trường, nó chỉ đơn giản như:

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

var func = '$rootScope.calculate'; 
eval(func)(1,2); //---> 3 
Các vấn đề liên quan