2010-10-14 16 views
5

मैं यह कैसे कर सकता हूं?तर्क के साथ फ़ंक्शन के लिए जावास्क्रिप्ट eval()

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

आप शुरू करने के लिए चाहते हो सकता है वाक्य रचनात्मक रूप से वैध कोड लिखकर। आप वहां पर एक बंद ब्रेस खो रहे हैं। –

उत्तर

6

सबसे पहले eval() का उपयोग न करें।

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

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

फ़ंक्शन ऑब्जेक्ट्स हैं, और आप किसी भी चर के लिए फ़ंक्शन का संदर्भ असाइन कर सकते हैं। फिर आप फ़ंक्शन का आह्वान करने के लिए उस संदर्भ का उपयोग कर सकते हैं।

+0

चीयर्स! स्पष्टीकरण के लिए भी धन्यवाद। – FFish

+0

मुझे लगता है कि सवाल के बिंदु को याद किया। आपका उदाहरण अभी भी हार्ड iCheckFcn को हार्डकोडेड मान isInFaorites में हार्डकोड करता है। प्रश्न ने विशेष रूप से पूछा कि फ़ंक्शन के नाम के साथ iCheckFcn गतिशील रूप से सेट करने के लिए कैसे किया गया है, लेकिन हार्डरोडेड के रूप में पारित नहीं किया गया है (उसके उदाहरण में var iCheckFcn को इस मामले में एक हार्डकोडेड स्ट्रिंग असाइन किया गया है लेकिन स्ट्रिंग में गतिशील रूप से पारित किया जा सकता है। –

+0

@PaulGorbas आपको एहसास है कि यह 6 साल से अधिक पुराना है, है ना? वैसे भी, कार्यों के संदर्भ पैरामीटर के रूप में पारित किए जा सकते हैं, और अभी भी 'eval()' की आवश्यकता नहीं है। – Pointy

2

सबसे अच्छा तरीका क्या नुकीले वर्णित है, या वैकल्पिक रूप से आप सिर्फ ऐसा कर सकता है है:

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

आप AngularJS वातावरण में कर रहे हैं, इसकी सिर्फ इतना है कि सरल:

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

var func = '$rootScope.calculate'; 
eval(func)(1,2); //---> 3 
संबंधित मुद्दे