2013-10-31 8 views
6

के संयोजन का उपयोग करके एक चर सेट करें क्या नाम बनाने के लिए दो तारों को एक साथ जोड़कर एक चर सेट करना संभव है?जावास्क्रिप्ट - स्ट्रिंग्स

यदि संभव हो तो मैं यह निर्धारित करना चाहता हूं कि उपयोगकर्ता द्वारा क्लिक की जाने वाली वस्तुओं के वर्ग नामों के आधार पर सेट करने के लिए कौन सा चर सेट करना है। मुझे पता है कि यदि कथन बयान है तो मैं कड़ी मेहनत कर सकता हूं, लेकिन अगर मैं अप्रत्यक्ष रूप से चर का संदर्भ दे सकता हूं तो यह वास्तव में अच्छा होगा। मैं इस तरह कुछ सोच रहा था:

var owner_read; 
var group_read; 

function setVariableIndirectly(object){ 
    var second = object.className; // returns "read" 
    var first = object.parentElement.className; // returns "group" 

    first + "_" + second = "set this as the new variable"; 
} 

क्या ऐसा करने का कोई तरीका है ??

संपादित करें:

यहाँ एचटीएमएल कि डेटा से आ रहा है।

<p class="owner"> 
    <span class="read" onclick="permissionClick(this)">r</span> 
    <span class="write" onclick="permissionClick(this)">w</span> 
    <span class="execute" onclick="permissionClick(this)">x</span> 
</p> 
+0

जावास्क्रिप्ट में "गतिशील नाम" के साथ कोई * चर * नहीं है ('eval' और' new Function' shenanigans को छोड़कर); क्या है, "गतिशील नाम" के साथ * गुण * (वस्तुओं का) हैं। मैं झड़पों से बचने के लिए 'कंटेनर' के रूप में 'कंटेनर' के रूप में उपयोग करने से बचूंगा (और आप * इन्हें ढूंढ लेंगे!) और "वैश्विक प्रदूषण" को कम करें, लेकिन इसके बजाय कुछ [आंतरिक] ऑब्जेक्ट का गुण उपयोग करें। – user2864740

उत्तर

6

यह स्पष्ट नहीं है कि वास्तव में आप क्या हासिल करने की कोशिश कर रहे हैं, लेकिन आप एक वस्तु के गुणों के रूप में नाम से चर का उपयोग कर सकते हैं।

// this is the container to hold your named variables 
// (which will be properties of this object) 
var container = {}; 

function setVariableIndirectly(obj){ 
    var second = obj.className; // returns "read" 
    var first = obj.parentNode.className; // returns "group" 

    // this is how you access a property of an object 
    // using a string as the property name  
    container[first + "_" + second] = "set this as the new variable"; 

    // in your example container["read_group"] would now be set 
} 

यह शायद के रूप में ऊपर दिखाए गए अपने स्वयं के कंटेनर वस्तु पर अपने चर डाल करने के लिए बेहतर है, लेकिन आप भी गुण के माध्यम से वैश्विक चर का उपयोग कर सकते window वस्तु पर।

window[first + "_" + second] = "set this as the new variable"; 

और उपयोग के रूप में:

+0

बिल्कुल सही !! क्षमा करें अगर मैं विवरण में स्पष्ट नहीं था। मैं अपनी मूल पोस्ट संपादित करूंगा, एचटीएमएल इसे थोड़ा और स्पष्ट बनाता है। –

+0

@ChrisSchmitz - FYI, शायद आप 'data-allowtyty =" जैसी विशेषता को 'वर्ग = "पढ़ने" के बजाए "विशेषता" पढ़ना चाहते हैं, क्योंकि आपके पास जिस तरह से है, आप स्टाइल के लिए किसी भी अन्य वर्ग का उपयोग नहीं कर सकते प्रयोजनों। – jfriend00

+0

आह, बहुत अच्छा बिंदु। एक बार फिर धन्यवाद! –

1

आप एक वैश्विक चर इस तरह से सेट कर सकते हैं

console.log(group_read); 
+0

मैं इसके निहित साइड इफेक्ट्स के कारण प्रदर्शन के रूप में 'विंडो [..]' का उपयोग करने की अनुशंसा नहीं करता हूं।एक बार गुण समझा जाता है - और वह 'विंडो' केवल एक वस्तु है, और कैसे जावास्क्रिप्ट पहचानकर्ताओं को हल करता है - शेष बस जगह में गिर जाता है। – user2864740

9

यह संभव है, लेकिन आप संदर्भ और गुंजाइश से सावधान रहना होगा।

global[str1 + str2] = value 

3. भीतर:

window[str1 + str2] = value 

2. नोड वातावरण में वैश्विक गुंजाइश के साथ चर सेट करने के लिए:

1. ब्राउज़र वातावरण में वैश्विक गुंजाइश के साथ चर सेट करने के लिए एक बंद और उस बंद होने के भीतर scoped:

this[str1 + str2] = value 

बंद होने के भीतर, वैश्विक और विंडो अभी भी वैश्विक स्थापित होगी। ध्यान दें कि यदि आप किसी फ़ंक्शन के भीतर हैं जिसे कहा जा रहा है, तो 'यह' किसी अन्य ऑब्जेक्ट को संदर्भित कर सकता है।

+0

एक स्थानीय चर के लिए क्या है, या एक समारोह के लिए पैरामीटर? – Michael

संबंधित मुद्दे