दिलचस्प पोस्ट
शब्दकोश से रैंडम प्रविष्टि ऑर्डर के साथ ऑब्जेक्ट की चाबी कैसे फ़िल्टर करें? स्थिर वर्ग के सदस्यों को स्थिर क्यों घोषित करना चाहिए? ऐसा क्यों नहीं है? एक .so इमारत है कि यह भी एक निष्पादन योग्य है कार्य का उपयोग करता है (टीपीएल) पुस्तकालय एक आवेदन multithreaded बनाते हैं? अलग अल्पविराम से अलग किए गए मान और तालिका में एसक्यूएल सर्वर में स्टोर करें फ़ंक्शन ओवरलोडिंग और यूडीएफ एक्सेल VBA में अवैध क्लाइंट पक्ष JWT सत्र चयनित तत्व का बाहरी HTML प्राप्त करें कैसे लाइन समापन रूपांतरण जीआईटी कोर के साथ काम करते हैं। विभिन्न ऑपरेटिंग सिस्टम के बीच कोणीय 2 – चेनिंग http अनुरोध डेटा यूआरएल पर एक छवि स्रोत सेट करना तत्काल उपलब्ध होना चाहिए? टास्क शेड्यूलर क्यों है। डिफ़ॉल्ट कार्यशेडर्यूलर के साथ? विंडोज़ 7 टास्कबार में एक जावा एप्लिकेशन को लगा रहा है पर कॉन्फ़िगरेशन को नहीं कहा जा रहा है

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

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

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

या

 showName("x"); 

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

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

 showName("x", x); 

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

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

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

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

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

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

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

 (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()