दिलचस्प पोस्ट
क्रॉन जॉब में PHP स्क्रिप्ट कार्यान्वित करें एजेक्स पोस्ट से फाइल डाउनलोड करें उद्देश्य सी: प्रगति पट्टी के साथ फ़ाइल डाउनलोड करना नोकोगिरि अधिष्ठापन विफल रहता है- libxml2 लापता है INI फ़ाइल को पढ़ना / लिखना मैं आस-पास के स्थानों जैसे कि बैंक, रेस्तरां, एटीएम, गूगल एरिया में गूगल मैप्स के क्षेत्र में खोज करने की कोशिश कर रहा हूं रूबी: आवश्यकता होती है vs_relative – रूबी <1.9.2 और> = 1.9.2 दोनों में चलने के लिए सबसे अच्छा अभ्यास दो सूचियों / ट्यूपल्स में जोड़े की एक सूची / टपल को अनपैक करना विज़ुअल स्टूडियो कुंजीपटल शॉर्टकट स्वचालित रूप से आवश्यक 'कथन' कथन जोड़ने के लिए पायथन – Excel स्प्रेडशीट में लिखें स्प्रिंग में ऑब्जेक्ट मैपरपर को कॉन्फ़िगर करना साधारण राज्य मशीन सी # में उदाहरण है? "कोई ऐसी फाइल या निर्देशिका नहीं" त्रुटि जब एक द्विआधारी निष्पादित पिटज़ के साथ अजीब टाइमज़ोन अंक कैसे हजारों अलगाव के रूप में अल्पविराम के साथ संख्या मुद्रित करें?

जावास्क्रिप्ट: पारित वैरिएबल का तर्क मान और नाम प्राप्त करें

मैं क्या करना चाहता हूँ एक चर का नाम और फ़ंक्शन के वैल्यू के वैल्यू को प्राप्त होता है और फंक्शन में केवल एक चर में पास होना होता है। इसलिए:

var x = "anything"; function showName() { } showName(x); 

या

 showName("x"); 

जो वापस आ जाएगा: "x = कुछ भी"

अभी, मुझे करना होगा:

 showName("x", x); 

क्रिएटिव के नाम और मूल्य को प्राप्त करने के लिए मैं पास हो रहा हूं। नोट करें कि मुझे ShowName के प्रोटोटाइप में तर्क के नाम पर कोई दिलचस्पी नहीं है, लेकिन कॉलिंग फ़ंक्शन में वेरिएबल का नाम। इसके अलावा, चर स्थानीय हो सकता है, इसलिए मैं चर वस्तु को खोजने के लिए विंडो ऑब्जेक्ट का उपयोग नहीं कर सकता।

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट: पारित वैरिएबल का तर्क मान और नाम प्राप्त करें"

संक्षिप्त उत्तर यह है कि आप नहीं कर सकते

लंबे समय तक, बुरा जवाब यह है कि आप कुछ वास्तविक नास्तिकता के साथ कर सकते हैं। और यह केवल तब काम करता है जब किसी अन्य फ़ंक्शन से कहा जाता है।

आपके लिए उपलब्ध दो दिलचस्प विशेषताएं हैं जो मदद कर सकते हैं

तर्कसंगतता कॉलर

के लिए कुछ ऐसा करने के लिए:

 (function(){ var showMe = function(s){ alert(arguments.callee.caller.toString().match(/showMe\((\S)\)/)[1] + ' = '+ s) } x = 1 showMe(x) })() 

क्या arguments.callee.caller.toString ()। मैच (..) [1] क्या शो के लिए दिखता है मुझे इसे कॉल करने वाले फ़ंक्शन में बुलाया जाता है और इसे प्रिंट करता है और इसका मान प्रिंट करता है

लेकिन यह अभी भी बहुत सीमित है क्योंकि यह केवल शो मी (एक्स) की पहली कॉल को हिट करेगा। इसलिए यदि इसमें दो कॉल्स हैं, तो यह काम नहीं करेगा।

लेकिन, इन रहस्यमय चीजों के साथ खेलने के लिए मज़ेदार था

 var x = "anything"; function showName(s) { alert(s + " = " + eval(s)); } showName("x"); 

अनुशंसित नहीं है, लेकिन वहां यह है।

मैं पहले से ही जानता था कि मैं एक वस्तु में पास कर सकता हूं:

 {a:"this is a"} 

जहां एक चर का नाम है, लेकिन मैं वास्तव में एक चर या एक चर (एक या "ए") के नाम से गुजारना चाहता हूं और फ़ंक्शन किसी भी तरह से वैरिएबल के नाम और उसका मान ढूंढना चाहता हूं।

इसका कारण यह है कि मैं यह कुछ अजीब बात करना चाहता हूं कि मैं डिबग प्रिंट दिनचर्या लिख ​​रहा हूं। अगर मैं इसे इस तरह से कहता हूं:

 var x = "some string"; say(x); 

या

 say("x"); 

मैं इसे कुछ ऐसे प्रिंट करना चाहता हूं:

 X (string) = some string 

मैं पारस्परिक रूप से एक प्रकार के पारित होने को मिल सकता है, और इसलिए मुझे पता है कि इसे कैसे मुद्रित किया जाए, लेकिन मैं वास्तव में इस तरह से इसे कॉल करने की लालच से बचने की कोशिश करना चाहता हूं:

 say("x", x); 

जो अब मुझे करना है

ऑर्बमन का जवाब लगभग काम करने वाला है बेशक, eval बुरा है , लेकिन मुझे लगता है कि यह ठीक है यहाँ क्योंकि यह केवल डिबग उपयोगिता के लिए है और प्रकाशित कोड में नहीं होगा मैंने उस समाधान का उपयोग करके अपना खुद का एक छोटा परीक्षण किया है:

 var x = "this is x"; function say(a) { alert(a + " = " + eval(a)); } say("x"); 

और यह काम करता है लेकिन केवल अगर एक्स वैश्विक है यह काम नहीं करता है:

 function wrapper() { var x = "this is x"; say("x"); } 

इसलिए, यह समाधान करीब है, लेकिन जब से मैं लगभग कोई ग्लोबल वैरिएबल का उपयोग नहीं करता हूं, यह काम करने वाला नहीं है। झकना, यह बहुत ही करीब है मुझे लगता है कि मुझे "मूल्य द्वारा" या "संदर्भ द्वारा" की बजाय "नाम से कॉल" की आवश्यकता है और मुझे एक फ़ंक्शन की आवश्यकता है जो इसे किसी अन्य फ़ंक्शन से कॉल किया जा रहा है या नहीं, या नहीं।

चूंकि मैंने इस पर कई घंटों में खुद को रखा है, यहां सवाल पूछना हताशा का कार्य था, मुझे यह निष्कर्ष निकालना होगा कि वास्तव में यह करने का कोई तरीका नहीं है। ओह।

सभी को जो जवाब दिया, आपके सभी सहायता के लिए धन्यवाद

आप एक हैश बना सकते हैं और इसे पास कर सकते हैं:

 var x = {a: 1,b:2} function showVars(y) { for (var z in y) { alert(z + " is " + y[z]); } } showVars(x); 

यह जरूरी नहीं कि वेरिएबल का नाम प्रदर्शित करता है, लेकिन यह कुंजी-वैल्यू जोड़े के लिए अनुमति देता है, जो कि आपके लिए क्या आवश्यक है।

डीबग करने के लिए मैं यही उपयोग करता हूं। कोई वैश्विक चर, कोई eval, कोई तर्क नहीं callee या arguments.caller:

 var Helpers = (function () { // ECMAScript 5 strict mode 'use strict'; var Module = {}; Module.debug = function () { var i; for (i = 0; i < arguments.length; i++) { console.log(arguments[i] + ':', this[arguments[i]]); } }; Module.SomeObject = function SomeObject() { this.someMember = 1; this.anotherMember = 'Whatever'; Module.debug.call(this, 'someMember', 'anotherMember'); var privateMember = { name: 'Rip Steakface', battleCry: 'Raaaaaaaaahhhhhhhhhrrrrrrrrrg!' }; Module.debug.call(privateMember, 'name', 'battleCry'); }; return Module; }()); 

जो लोग सोच रहे हैं कि आप ऐसा क्यों करना चाहते हैं, यह केवल उनके नामों के साथ कई चर को कुशलता से लॉग करने का एक तरीका है।

यदि आप Module.debug.call(obj, 'hair.fluffiness') . Module.debug.call(obj, 'hair.fluffiness') में नेस्टेड सदस्यों को लॉग इन करने में सक्षम होना चाहते हैं, तो आप ऐसा फ़ंक्शन संशोधित कर सकते हैं:

 Module.debug = function () { var i, j, props, tmp; for (i = 0; i < arguments.length; i++) { tmp = this; props = arguments[i].split('.'); for (j = 0; j < props.length; j++) { tmp = tmp[props[j]]; } console.log(arguments[i] + ':', tmp); } }; 

दुर्भाग्यवश, मुझे कोई निजी ऑब्जेक्ट के सदस्य नहीं हैं, जैसे कि var roll = 3, value = 4; Module.debug.call(???); कुशलता से लॉग इन करने के लिए कोई भी तरीका नहीं मिल सकता है var roll = 3, value = 4; Module.debug.call(???); var roll = 3, value = 4; Module.debug.call(???);

सुनिश्चित नहीं है कि आप सीधे जावास्क्रिप्ट से क्या प्राप्त कर सकते हैं , क्योंकि वैरिएबल नाम उस मूल्य के साथ नहीं होता है, जो इसे संदर्भ (केवल पहचानकर्ता के रूप में चर नामों के बारे में सोचते हैं, लेकिन जो कि रनटाइम पर फेंक दिया जाता है)।

हालांकि, आप थोड़ा अलग कर सकते हैं जो नामित तर्कों को पार करने के लिए अनुमति देता है। एक अज्ञात वस्तु बनाएं और अपने फ़ंक्शन पर पास करें:

 function showNames(o) { for( var ix in o ) { alert( ix + ":" + o[ix] ); } } var z = { x : "Anything" } showNames( z ); // or showNames( { a : "ay", b : "bee", c: "see" } ) 

वस्तु गुणों को पुनरावृति करने के लिए, मैं एक कार्यात्मक-शैली को पसंद करता हूं, जैसे:

 Array.iteri = function(o, f) { for(var i in o) { f(i, o[i]) } } function showNames(o) { Array.iteri( o, function(i,v) { alert( i + ": " + v ) }); } showNames( { a : "ay", b : "bee", c: "see" } ) 

नीचे दिए गए कोड के बारे में सबसे अच्छा है जो आप कर सकते हैं। दुर्भाग्य से किसी फ़ंक्शन में स्थानीय चर को छुपा कॉल ऑब्जेक्ट के गुण होते हैं ताकि वे जावास्क्रिप्ट से खिड़की [ए] की तरह एक्सेस न कर सकें जहां कोई विंडो ऑब्जेक्ट की संपत्ति है।

 x = "this is x"; var say = function(a) { document.write(a + " = " + window[a]); } say("x"); var wrapper = function () { var x = "this is x"; document.write(x + " = " + eval("x")) } wrapper()