2012-06-22 19 views
5

एक शैली सम्मेलन मैं जब मैं वैश्विक क्षेत्र में चर तक पहुँचने कर रहा हूँ स्पष्ट होना चाहते हैं,क्या मुझे वैश्विक दायरे को संदर्भित करने के लिए स्वयं या विंडो का उपयोग करना चाहिए?

window.example = "Hello"; 
window.alert(window.example); 
कम वर्बोज़

example = "Hello"; 
alert(example); 

मैं अब एक मॉड्यूल जो इस्तेमाल किया जा सकता है करने के लिए पसंद करते हैं

सीधे ब्राउज़र से, या, यदि वे उपलब्ध हैं, तो वेब कार्यकर्ता से। वेब श्रमिकों में वैश्विक वस्तु को self कहा जाता है, जबकि ब्राउज़र में इसे window कहा जाता है।

window वस्तु एक आत्म संपत्ति है, तो self.example = "Hello" दोनों संदर्भों में काम करेगा, जब तक कि कोई redeclares self (वे अक्सर करते हैं: var self = this)।

साथ जाने के लिए सबसे अच्छा सम्मेलन क्या है?

  • उपयोग self और कोई वाणी है, तो विरोधी self उम्मीद है।
  • यदि window परिभाषित किया गया है, तो window का उपयोग करें, अन्यथा self का उपयोग करें।
  • कुछ और?

इसके बारे में सोचना, मैं दूसरे के साथ जाने के इच्छुक हूं।

उत्तर

6

वैश्विक क्षेत्र में, आप कर सकते हैं इस तरह लिखने कोड:

(function(global) { 
    // ... whatever 
}(this); 

तो है कि मुख्य बाहरी समारोह के अंदर आप उपयोग कर सकते हैं "वैश्विक" (या "वाई फोन ndow "या" self "या" जो कुछ भी ") और यह किसी भी संदर्भ में (या उस मामले के लिए Node.js में) काम करेगा।

1

मेरा सुझाव था

var global; try { global = window } catch(e) { global = self } 
+0

आश्चर्य की बात है, यह वेब कार्यकर्ता में उपयोग किए जाने पर संदर्भ त्रुटि फेंकने लगता है। क्रोम कहता है: "संदर्भ त्रुटि: चर नहीं मिल सकता: विंडो"। मुझे जिक्र करना चाहिए कि मैं अपने कार्यकर्ता से इस मॉड्यूल को लोड करने के लिए आवश्यकता जेएस का उपयोग कर रहा हूं, इसलिए मुझे लगता है कि कुछ अजीबता का स्रोत हो सकता है। – RichardTowers

+0

माफ़ी, मैं एक चर के कठोर हैंडलिंग भूल गया जो अस्तित्व में नहीं है। ठीक कर दिया। – matt3141

+0

'वैश्विक = टाइपोफ़ विंडो! ==" अपरिभाषित "&& विंडो! == शून्य? खिड़की: स्वयं; 'त्रुटि के बिना भी काम करता प्रतीत होता है। मैं हालांकि @ प्वाइंट के जवाब की तरह करता हूं। – RichardTowers

0

आप या तो खिड़की या आत्म करने के लिए अपने स्वयं के संदर्भ बना सकते हैं: पेज में या एक वेब कार्यकर्ता या तो,

var my_window = window || self; 
+0

लेकिन, एक वेबवर्कर में, वैश्विक संदर्भ एक खिड़की नहीं है, इसलिए वैश्विक संदर्भ 'my_window' को बुलाकर गुमराह करना प्रतीत होता है। – jfriend00

+0

डेवलपर स्पष्ट रूप से अपने चर नाम देने के लिए स्वतंत्र है क्योंकि वह प्रसन्न करता है – jackwanders

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