मुझे हाल ही में जावास्क्रिप्ट में गतिशील रूप से जावास्क्रिप्ट फ़ंक्शन को फिर से लिखने की आवश्यकता थी। जिस तरह से मैंने इसे किया, और यह कितना मजेदार था, मुझे आश्चर्यचकित कर दिया।आप किन भाषाओं पर गतिशील रूप से कार्यों को फिर से लिख सकते हैं?
यहाँ से अधिक मैं कुछ HTML मिल गया है:
<div id="excelExport1234"
onclick="if(somestuff) location.href='http://server/excelExport.aspx?id=56789&something=else'; else alert('not important');"
>Click here to export to excel</div>
और मैं outputted एचटीएमएल बदल नहीं सकता है, लेकिन मुझे लगता है कि लिंक के लिए एक अतिरिक्त पैरामीटर जोड़ने की जरूरत है। मैं इसके बारे में सोचना शुरू कर दिया, और महसूस किया मैं तो बस ऐसा कर सकता है:
excelExport = $('excelExport1234');
if (needParam)
eval('excelExport.onclick = ' + excelExport.onclick.toString().replace("excelReport.aspx?id", "excelReport.aspx?extraParam=true&id") + ';');
else
eval('excelExport.onclick = ' + excelExport.onclick.toString().replace("extraParam=true&", "") + ';');
और यह एक विजेता की तरह काम किया! excelExport.onclick एक फ़ंक्शन ऑब्जेक्ट देता है जिसे मैं एक स्ट्रिंग में परिवर्तित करता हूं, और कुछ स्ट्रिंग मैनिप करता हूं। चूंकि यह अब "फ़ंक्शन() {...}" के रूप में है, इसलिए मैं वापस जाता हूं और इसे डोम ऑब्जेक्ट की ऑनक्लिक घटना में असाइन करता हूं। यह eval का उपयोग करने के लिए थोड़ा बदसूरत है, लेकिन AFAIK एक जावास्क्रिप्ट फ़ंक्शन कन्स्ट्रक्टर नहीं है जो कोड की एक स्ट्रिंग ले सकता है और इसे अच्छी तरह से किसी ऑब्जेक्ट में बदल सकता है।
वैसे भी, मेरा मुद्दा यह नहीं है कि मैं सुपर चालाक हूं (मैं नहीं हूं), मेरा मुद्दा यह है कि यह अच्छा है। और मुझे पता है कि जावास्क्रिप्ट एकमात्र ऐसी भाषा नहीं है जो यह कर सकती है। मैंने सुना है कि इस सटीक उद्देश्य के लिए लिस्प में वर्षों से मैक्रोज़ हैं। वास्तव में ग्रोक मैक्रोज़ को छोड़कर आपको वास्तव में गड़बड़ करने की ज़रूरत है, और मैं इसे ग्रोक नहीं करता हूं, मैं बस इसे प्राप्त करता हूं।
तो मेरा प्रश्न है: अन्य भाषाओं में आप (आसानी से) गतिशील रूप से कार्यों को फिर से लिख सकते हैं, और क्या आप मुझे एक साधारण उदाहरण दिखा सकते हैं? मैं देखना चाहता हूं कि आप यह कहां कर सकते हैं, और यह कैसे किया जाता है!
(भी, मुझे नहीं पता क्या के रूप में इस टैग करने के लिए है, तो मैं यादृच्छिक अनुमान लिया)
इस तरह पागलपन है। – skaffman
शायद समुदाय विकी? – ChristopheD
मैंने कभी नहीं कहा कि यह करने के लिए सबसे सुंदर बात थी, लेकिन यह बहुत अच्छा है। यह सबसे कम twiddling हैक्स की तरह है - खतरनाक कारण वे संकलक कार्यान्वयन और इस तरह, लेकिन अभी भी चालाक और दिलचस्प पर भरोसा कर सकते हैं। –