दिलचस्प पोस्ट
कांस्य 2/4 सेवाओं और घटकों में पाइप का उपयोग करें संघ # संघ, एकत्रीकरण, संरचना के लिए सी # कोड मैं JavaScript में IsPostBack के लिए कैसे जांच सकता हूं? कैसे sizeof (सरणी) रनटाइम पर काम करता है? फ़ंक्शन पॉइंटर्स, क्लोज़र और लैम्ब्डा जावा का अर्रे अनुक्रमणिका कहाँ है? क्या अब भी एचटीएमएल छवि मैप्स का उपयोग किया जाता है? सुपर सुपर क्लास विधि कॉलिंग C ++ को उपयोगकर्ता द्वारा प्रदत्त डिफ़ॉल्ट कन्स्ट्रक्टर की आवश्यकता क्यों है- एक const वस्तु का निर्माण? डी 3 – कैसे JSON डेटा संरचनाओं से निपटने के लिए? एंड्रॉइड ऑडियोरेकॉर्ड समर्थित नमूनाकरण दर विंडोज़ अनुप्रयोग के लिए ऑनलाइन पंजीकरण के साथ इंस्टालर सी में रनटाइम पर मैक्रो बदलना सूची तत्वों तक कैसे पहुंचें रेफरी द्वारा पारित सूची – मुझे यह व्यवहार समझाओ

किसी वैरिएबल में नामित जावास्क्रिप्ट फंक्शन कॉल करना

मेरे पास जावास्क्रिप्ट चर है जिसमें जावास्क्रिप्ट फंक्शन का नाम है। यह फ़ंक्शन पृष्ठ पर लोड हो रहा है और $ .एजेएक्स आदि का उपयोग कर रखता है।

क्या कोई मुझे बता सकता है कि मैं चर में नामित जावास्क्रिप्ट समारोह को कैसे कॉल करूंगा, कृपया?

फ़ंक्शन का नाम एक चर में है क्योंकि पृष्ठ का टुकड़ा लोड करने के लिए यूआरएल (जो वर्तमान पृष्ठ में डाला जाता है) में कॉल करने के लिए फ़ंक्शन का नाम होता है।

मैं इस समाधान को कैसे कार्यान्वित करने के बारे में अन्य सुझावों के लिए खुला हूँ

Solutions Collecting From Web of "किसी वैरिएबल में नामित जावास्क्रिप्ट फंक्शन कॉल करना"

मैं eval से बचना होगा

इस समस्या को हल करने के लिए, आपको जावास्क्रिप्ट के बारे में इन चीजों को जानना चाहिए।

  1. फ़ंक्शंस प्रथम श्रेणी की ऑब्जेक्ट हैं, इसलिए वे एक ऑब्जेक्ट का गुण हो सकते हैं (जिस स्थिति में उन्हें विधियां कहा जाता है ) या एरे के तत्व भी।
  2. यदि आप किसी ऑब्जेक्ट को फ़ंक्शन के अंतर्गत नहीं चुनना चाहते हैं, तो यह वैश्विक दायरा के अंतर्गत आता है। ब्राउज़र में, इसका अर्थ है कि आप इसे "विंडो" नाम वाले ऑब्जेक्ट पर लटका रहे हैं, जहां पर ग्लोब लाइव है
  3. एरेज़ और ऑब्जेक्ट्स सघन रूप से संबंधित हैं (अफवाह यह है कि वे अनाचार का नतीजा भी हो सकते हैं!) आप अक्सर डॉट का इस्तेमाल करके प्रतिस्थापित कर सकते हैं . बजाय वर्ग कोष्ठक [] , या इसके ठीक विपरीत।

आपकी समस्या वर्ग ब्रैकेट के बजाय संदर्भ के डॉट तरीके पर विचार करने का परिणाम है

तो, कुछ ऐसा क्यों नहीं,

 window["functionName"](); 

यह मानते हुए कि आपका फ़ंक्शन वैश्विक अंतरिक्ष में रहता है। यदि आपने नाम दिया है, तो:

 myNameSpace["functionName"](); 

Eval से बचें, और settimeout और setInterval सेट करने के लिए एक स्ट्रिंग से गुजरने से बचें मैं बहुत सारे जेएस लिखता हूं, और मुझे एवल की आवश्यकता नहीं होती। "आवश्यकता" eval भाषा गहराई से पर्याप्त नहीं जानने से आता है आपको स्कोपिंग, प्रसंग और वाक्यविन्यास के बारे में जानने की जरूरत है। यदि आप कभी भी एक eval के साथ अटक कर रहे हैं, बस पूछो – आप जल्दी से सीख लेंगे

यदि यह वैश्विक दायरे में है तो इसका उपयोग करना बेहतर होता है:

 function foo() { alert('foo'); } var a = 'foo'; window[a](); 

से eval() चूंकि eval() evaaaaal है

निसारडे की तरह ठीक कहा है कि मेरे सामने 40 सेकंड है। <

निश्चित रूप से eval का उपयोग इस तरह से कुछ करने से बचें, या आप स्वयं को XSS (क्रॉस-साइट स्क्रिप्टिंग) भेद्यताओं के लिए खुलेंगे

उदाहरण के लिए, यदि आप यहां प्रस्तावित eval समाधानों का उपयोग कर रहे थे, तो एक नेफिशियस उपयोगकर्ता अपने शिकार का एक लिंक भेज सकता है जो इस तरह दिखता है:

http://yoursite.com/foo.html?func=function() {चेतावनी ('Im% 20In% 20Teh% 20Codez');}

और उनकी जावास्क्रिप्ट, आपकी नहीं, निष्पादित हो जाएगी। यह कोड सिर्फ एक चेतावनी को पॉप अप से कहीं ज्यादा खराब कर सकता है; यह कुकीज़ चोरी कर सकता है, आपके आवेदन में अनुरोध भेज सकता है आदि।

इसलिए, सुनिश्चित करें कि आपने कभी अविश्वसनीय कोड नहीं छोड़ा है जो उपयोगकर्ता इनपुट से आता है (और क्वेरी स्ट्रिंग आईडी पर कुछ भी उपयोगकर्ता माना जाता है)। आप उपयोगकर्ता इनपुट को एक ऐसी कुंजी के रूप में ले सकते हैं जो आपके फ़ंक्शन को इंगित करेगा, लेकिन सुनिश्चित करें कि आप कुछ भी निष्पादित नहीं करते हैं यदि दी गई स्ट्रिंग आपके ऑब्जेक्ट में किसी कुंजी से मेल नहीं खाती है। उदाहरण के लिए:

 // set up the possible functions: var myFuncs = { func1: function () { alert('Function 1'); }, func2: function () { alert('Function 2'); }, func3: function () { alert('Function 3'); }, func4: function () { alert('Function 4'); }, func5: function () { alert('Function 5'); } }; // execute the one specified in the 'funcToRun' variable: myFuncs[funcToRun](); 

यह असफल हो जायेगा अगर funcToRun चर myFuncs ऑब्जेक्ट में कुछ भी नहीं इंगित करता है, लेकिन यह कोई कोड निष्पादित नहीं करेगा।

यह थोड़े बदसूरत है, लेकिन यह मेरे सिर में popped है कि पहली बात है। यह भी आपको तर्क में पारित करने की अनुमति चाहिए:

 eval('var myfunc = ' + variable); myfunc(args, ...); 

यदि आपको तर्क में पारित करने की आवश्यकता नहीं है, यह आसान हो सकता है।

 eval(variable + '();'); 

मानक सूखी-कोड चेतावनी लागू होती है।