दिलचस्प पोस्ट
सी # के लिए सरल असुरक्षित दो-तरफ़ा "अस्पष्ट" जावास्क्रिप्ट में एक regex मैच के nth उदाहरण की जगह एकाधिक स्क्रीन रिज़ॉल्यूशन क्या एक एम्बेडेड डाटाबेस के रूप में इस्तेमाल किया जा सकता है? डेटाबेस को हैश को सहेजने के लिए पटरियों का उपयोग करें serialize एंड्रॉइड एप्लिकेशन को अग्रभूमि में चेक करना है या नहीं? पेंट कम्पेनेंट () बनाम पेंट () और जेपीएनएल बनाम कैनवास एक पेंटब्रश-टाइप जीयूआई में C फ़ंक्शन किसी खास स्थान पर पाठ में मौजूदा टेक्स्ट को ओवर-लिस्ट किए बिना सम्मिलित करने के लिए System.Drawing.Image स्ट्रीम सी # डाटा जारी रखने के लिए एंड्रॉइड एपलीकेशन क्लास का इस्तेमाल करना एक फ़ाइल में डुप्लिकेट लाइनें ढूंढें और गणना करें कि प्रत्येक पंक्ति को कितनी बार डुप्लिकेट किया गया था? पुनरावृत्त regex लिखने के लिए कैसे नेस्टेड कोष्ठक से मेल खाता है? स्विफ्ट में ताज़ा करने के लिए पुल का उपयोग कैसे करें? आप ASP.NET MVC में अधिभार नियंत्रक विधियों कर सकते हैं? एक्सएमएल बीओएम क्या है और मैं इसे कैसे पहचानूं?

जावास्क्रिप्ट ऑब्जेक्ट नाम के रूप में चर का उपयोग करें

मैं एक ऑब्जेक्ट का उपयोग करने के लिए एक वैरिएबल के वैल्यू का इस्तेमाल करना चाहता हूं।

मान लें कि मेरे ऑब्जेक्ट नाम का एक ऑब्जेक्ट है I

मुझे इस नाम के साथ एक वैरिएबल भरना है और वस्तु का उपयोग करने के लिए वेरिएबल का उपयोग करना है।

उदाहरण:

var objname = 'myobject'; {objname}.value = 'value'; 

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट ऑब्जेक्ट नाम के रूप में चर का उपयोग करें"

ग्लोबल:

 myObject = { value: 0 }; anObjectName = "myObject"; this[anObjectName].value++; console.log(this[anObjectName]); 

ग्लोबल: v2

 var anObjectName = "myObject"; this[anObjectName] = "myvalue" console.log(myObject) 

स्थानीय: v1

 (function() { var scope = this; if (scope != arguments.callee) { arguments.callee.call(arguments.callee); return false; } scope.myObject = { value: 0 }; scope.anObjectName = "myObject"; scope[scope.anObjectName].value++; console.log(scope.myObject.value); })(); 

स्थानीय: v2

 (function() { var scope = this; scope.myObject = { value: 0 }; scope.anObjectName = "myObject"; scope[scope.anObjectName].value++; console.log(scope.myObject.value); }).call({}); 

ऑब्जेक्ट कुछ गुंजाइश में मौजूद है, इसलिए आप लगभग हमेशा इस वाक्यविन्यास के माध्यम से चर तक पहुंच सकते हैं:

 var objname = "myobject"; containing_scope_reference[objname].some_property = 'some value'; 

एकमात्र ऐसा स्थान जहां यह मुश्किल हो जाता है, जब आप एक बंद क्षेत्र में होते हैं और आप शीर्ष-स्तरीय स्थानीय चर तक पहुँच चाहते हैं जब आपके पास ऐसा कुछ होता है:

 (function(){ var some_variable = {value: 25}; var x = "some_variable"; console.log(this[x], window[x]); // Doesn't work })(); 

आप वर्तमान गुंजाइश श्रृंखला तक पहुंचने के बजाय eval का उपयोग करके इसके आसपास मिल सकते हैं … लेकिन मैं इसे तब तक अनुशंसा नहीं करता जब तक कि आपने बहुत सारे परीक्षण किए हों और आप जानते हैं कि चीजों के बारे में जाने का सबसे अच्छा तरीका यह है।

 (function(){ var some_variable = {value: 25}; var x = "some_variable"; eval(x).value = 42; console.log(some_variable); // Works })(); 

तुम्हारा सबसे अच्छा शर्त हमेशा हमेशा चलने वाली वस्तु-वस्तु में एक नाम का संदर्भ (जैसे कि वैश्विक क्षेत्र में या स्थानीय क्षेत्र में एक निजी शीर्ष-स्तरीय चर) में है और वहां पर बाकी सब कुछ डाल दिया जाए।

इस प्रकार:

 var my_outer_variable = {}; var outer_pointer = 'my_outer_variable'; // Reach my_outer_variable with this[outer_pointer] // or window[outer_pointer] (function(){ var my_inner_scope = {'my_inner_variable': {} }; var inner_pointer = 'my_inner_variable'; // Reach my_inner_variable by using // my_inner_scope[inner_pointer] })(); 

क्या यह एक वैश्विक चर है? यदि हां, तो ये वास्तव में window ऑब्जेक्ट का हिस्सा window , ताकि आप window[objname].valuewindow[objname].value

यदि यह किसी फ़ंक्शन के लिए स्थानीय है, तो मुझे नहीं लगता कि आप क्या करना चाहते हैं यह अच्छा तरीका है।

आप सामान्य रूप से खिड़की के दायरे को छोड़कर ऐसा नहीं कर सकते, जहां आप window[objname].value = 'value'; लिख सकते window[objname].value = 'value';

आप eval उपयोग कर सकते हैं:

 eval(variablename + ".value = 'value'"); 

मुझे लगता है कि स्थानीय चर के लिए शाज़ का जवाब समझना कठिन है, हालांकि यह गैर-रिकर्सिव फ़ंक्शंस के लिए काम करता है। यहाँ एक और तरीका है जो मुझे लगता है कि यह स्पष्ट है (लेकिन यह अभी भी उसका विचार है, सटीक वही व्यवहार) यह गतिशील रूप से स्थानीय चर तक नहीं पहुंच रहा है, बस स्थानीय चर की संपत्ति है।

मूलतः, यह एक वैश्विक चर का उपयोग कर रहा है (फ़ंक्शन ऑब्जेक्ट से जुड़ा हुआ है)

 // Here's a version of it that is more straight forward. function doIt() { doIt.objname = {}; var someObject = "objname"; doIt[someObject].value = "value"; console.log(doIt.objname); })(); 

जो अनिवार्य रूप से वैरिएबल को स्टोर करने के लिए एक वैश्विक बनाने के समान है, इसलिए आप उसे एक संपत्ति के रूप में उपयोग कर सकते हैं। ऐसा करने के लिए एक वैश्विक बनाना एक ऐसी हैक है

यहां एक क्लीनर हैक जो वैश्विक वैरिएबल नहीं बना रहा है, यह एक स्थानीय चर का उपयोग करता है

 function doIt() { var scope = { MyProp: "Hello" }; var name = "MyProp"; console.log(scope[name]); } 

जावास्क्रिप्ट देखें : स्ट्रिंग को ऑब्जेक्ट संदर्भ के रूप में समझें?

चर नाम के आसपास चौकोर ब्रेट का उपयोग करें।

 var objname = 'myobject'; {[objname]}.value = 'value'; 

विंडो का उपयोग करते समय [objname], कृपया सुनिश्चित करें कि objname वैश्विक चर है अन्यथा, कुछ समय काम करेगा, और कभी-कभी असफल हो जायेगा। विंडो [objname] .Value।

यदि वस्तु कुछ नाम स्थान पर है I Company.Module.Components.Foo आप इस फ़ंक्शन का उपयोग कर सकते हैं:

CoffeeScript:

 objByName: (name, context = window) -> ns = name.split "." func = context for n, i in ns func = func[n] return func 

परिणामस्वरूप जेएस:

 objByName: function(name, context) { var func, i, n, ns, _i, _len; if (context == null) { context = window; } ns = name.split("."); func = context; for (i = _i = 0, _len = ns.length; _i < _len; i = ++_i) { n = ns[i]; func = func[n]; } return func; } 

फिर आप एक नया ऑब्जेक्ट बना सकते हैं या कुछ भी कर सकते हैं। माता-पिता के माध्यम से ध्यान दें।

 var o = new (objByName('Company.Module.Components.Foo')) objByName('some.deeply.nested.object').value 

यह विचार समान प्रश्न से उधार लिया गया है: जब किसी स्ट्रिंग के नाम पर जावास्क्रिप्ट फ़ंक्शन निष्पादित किया जाए

 var micro=[{'test':'hello'}]; var device = 'test'; console.log(micro[device]);