2010-09-03 15 views
29

मेरे पास एक जावास्क्रिप्ट है जो यह पता लगाने के साथ सौदा करता है कि पृष्ठ फ़्रेम में है या नहीं। मैंने top.frames [] आदि का उपयोग किया और सब कुछ ठीक काम करता है।स्वयं और खिड़की के बीच क्या अंतर है?

इस स्क्रिप्ट में मैंने देखा है कि मैं दूसरे के स्थान पर "खिड़की" या "स्व" का उपयोग कर सकते है और सब कुछ अभी भी काम करता है। HTML पृष्ठ में उपयोग किए जाने पर "विंडो" "स्वयं" जैसा ही है?

+6

वेब श्रमिक स्वयं और खिड़की का उपयोग करते समय एक ही चीज़ नहीं है। देखें [http://stackoverflow.com/questions/11219775/global-variable-in-web-worker][1] [1]: http://stackoverflow.com/questions/11219775/global -वर्तनीय-इन-वेब-वर्कर – user1872904

उत्तर

15

जावास्क्रिप्ट से: यह निश्चित गाइड:

विंडो वस्तु गुण और विधियों कि आप वेब ब्राउज़र विंडो हेरफेर करने की अनुमति के एक नंबर को परिभाषित करता है। यह भी गुण है कि अन्य महत्वपूर्ण वस्तुओं के लिए देखें, दस्तावेज़ वस्तु के लिए इस तरह के रूप document संपत्ति परिभाषित करता है। अंत में, खिड़की वस्तु दो आत्म निर्देशात्मक गुण, window और self है। आप या तो वैश्विक चर का उपयोग कर सकते हैं सीधे विंडो ऑब्जेक्ट पर संदर्भित करें।

संक्षेप में, window और self दोनों खिड़की वस्तु है, जो क्लाइंट साइड जावास्क्रिप्ट के वैश्विक वस्तु है के लिए संदर्भ।

+0

अगर एफएफ 6.0, http://stackoverflow.com/a/7769187/139361, 'विंडो' और' स्वयं 'समान होना चाहिए तो नेक्रो-बग को छोड़कर। कोई भी अन्य बग जानता है? --------------------------------------- मुझे इसे 'स्वयं' का उपयोग करके जोड़ना होगा अधिकांश जावास्क्रिप्ट डेवलपर्स को भ्रमित कर रहा है, इसलिए इसके बजाय 'विंडो' का उपयोग करें। – Dan

8

पर एक नजर है:

if (window.parent.frames[0] != window.self) { 
    // this window is not the first frame in the list 
} 

window.self लगभग हमेशा तुलना में की तरह उदाहरण में ऊपर प्रयोग किया जाता है, जो पता चलता है कि वर्तमान विंडो पैरेंट फ्रेमसेट में पहला उपफ्रेम है या नहीं।

यह देखते हुए कि कोई भी इन दिनों फ़्रेमसेट उपयोग कर रहा है, मुझे लगता है कि यह विचार करने के लिए वहाँ self के लिए कोई उपयोगी मामलों रहे हैं कि ठीक है। इसके अलावा, कम से कम फ़ायरफ़ॉक्स में, window.self के बजाय window के विरुद्ध परीक्षण बराबर है।

+0

कोड के लिए जो ब्राउज़र से स्वतंत्र चलाने की आवश्यकता है, ऐसा लगता है कि 'स्वयं', यानी हेडलेस निष्पादन का उपयोग करना बेहतर लगता है। – nilskp

+0

@nilskp, यह दिलचस्प है, लेकिन मैं आपको समझ में नहीं आया। क्या आप कृपया समझा सकते हैं? – Dan

+0

@ डैन, 'विंडो' केवल एक जीयूआई (ब्राउज़र) में मौजूद है। ब्राउज़र में सभी जावास्क्रिप्ट कोड नहीं चलता है। उन मामलों में, 'स्वयं' अभी भी काम करेगा, लेकिन 'विंडो' नहीं होगी। – nilskp

6

self एक केवल पढ़ने के लिए संपत्ति है कि तुलना में अधिक लचीला, और कभी कभी की, window सीधे पक्ष में इस्तेमाल किया जा सकता है। क्योंकि ऑपरेटिंग संदर्भ के आधार पर self के संदर्भ में परिवर्तन (window.self के विपरीत है, जो केवल मौजूद window मौजूद है) यह वह जगह है। यह तुलना के लिए भी बहुत अच्छा है, जैसा कि अन्य ने उल्लेख किया है।

उदाहरण के लिए, यदि आप एक वेब वर्कर (जो अपने स्वयं के पृष्ठभूमि धागे में रहता है) के अंदर self का उपयोग करते हैं, तो self वास्तव में WorkerGlobalScope.self का संदर्भ देगा। हालांकि, अगर आप एक सामान्य ब्राउज़र संदर्भ में self उपयोग करते हैं, self बस Window.self के लिए एक संदर्भ वापस आ जाएगी (एक है कि document है, addEventListener(), और अन्य सभी सामान आप देखने के अभ्यस्त हैं)।

टी एल; डॉ window.self में .self एक पारंपरिक खिड़की/ब्राउज़र संदर्भ में Window.self की अपनी इच्छा मुद्दे पर self का उपयोग कर यदि window मौजूद नहीं है मौजूद है, जबकि नहीं करेगा, या वेब कार्यकर्ता संदर्भ में WorkerGlobalScope.self

सामान्य रूप से, एमडीएन के पास इस विषय in their JavaScript docs पर एक महान लेखन है। :)


साइड नोट: var self = this स्विच करने के बाद एक संदर्भ के लिए एक संदर्भ बनाए रखने के लिए:self यहाँ के उपयोग के लिए एक स्थानीय चर घोषित करने के आम जे एस पैटर्न के साथ भ्रमित नहीं होना चाहिए।

आप यहां इसके बारे में अधिक पढ़ सकते हैं: Getting Out of Binding Situations in JavaScript

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