2016-02-28 9 views
6

मैंने वेबसाइट पर निम्नलिखित को पढ़ा:जेएस: 'यह' जबरदस्ती क्या है? इसका उपयोग क्या है-सख्त को इसके साथ क्या करना है?

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

इसका क्या अर्थ है? this जबरदस्ती के साथ क्या करना है-सख्त करना है?

+2

आप जावास्क्रिप्ट के 'यह' के बारे में पहले से क्या जानते हैं? (क्या एक स्पष्टीकरण को सामान्य अर्थ में 'इस' का उपयोग करने के मूलभूत सिद्धांतों के साथ शुरू करना होगा, या ...?) – nnnnnn

+3

आपके द्वारा उद्धृत पाठ यह समझाता है कि "इस मजबूती" का अर्थ क्या है (इस संदर्भ में)। आप वास्तव में क्या समझ में नहीं आता? विवरण बहुत सटीक नहीं है: * "सख्त मोड में, शून्य या अपरिभाषित के इस मान को संदर्भित करने से त्रुटि उत्पन्न होती है।" * यह बिल्कुल सही नहीं है। 'इस' को एक्सेस करने से कोई त्रुटि नहीं आ जाएगी। 'this.something' होगा। –

+0

यह [लिंक] (http://stackoverflow.com/a/11496488/452708) कुछ अंतर्दृष्टि फेंक सकता है। – Abhijeet

उत्तर

2

जब आप जावास्क्रिप्ट में एक समारोह फोन, 'यह' संदर्भ के आधार पर अलग अलग बातें करने के लिए संदर्भित करेंगे: समारोह के लिए बाध्य कर दिया गया है

  1. हैं, 'इस' जो कुछ भी पर सेट हो जाएगा यह उदाहरण के लिए बाध्य था fn.bind(x)()

  2. आप fn.call(x) या fn.apply(x), इस एक्स पर सेट हो जाएगा का उपयोग कर समारोह लागू हैं।

  3. समारोह तीर अंकन का उपयोग परिभाषित किया गया था, तो this जो कुछ भी जब समारोह परिभाषित किया गया था this होने के लिए परिभाषित किया गया था कर दिया जाएगा।

  4. आप thing.fn() साथ फ़ंक्शन को कॉल करते हैं, तो this से पहले क्या है '।', इस मामले 'बात' में है।

  5. यदि आप new के साथ बुलाए गए कंस्ट्रक्टर में हैं तो this निर्माण के तहत नई वस्तु को संदर्भित करता है।

  6. तुम सिर्फ एक नंगे समारोह बुला रहे हैं, तो यह है कि किसी भी वस्तु, कि बाध्य नहीं है पर नहीं है, कि एक तीर समारोह नहीं है और आप सरल तरीके से यह कॉल कर रहे हैं, का उपयोग किए बिना कॉल या लागू करें, तो this वैश्विक ऑब्जेक्ट को संदर्भित करेगा यदि आप सख्त मोड में नहीं हैं, और यदि आप सख्त मोड में हैं तो अपरिभाषित। उद्धरण द्वारा 'इस मजबूती' के रूप में को संदर्भित किया गया है।

है यही कारण है कि, आप एक ब्राउज़र कंसोल खोलें और टाइप

Function('console.log(this)')()

अगर सांत्वना होगा उत्पादन विंडो जो ब्राउज़र में वैश्विक वस्तु है। लेकिन यदि आप कंसोल खोलें और टाइप

Function('"use strict";console.log(this)')()

सांत्वना undefined प्रवेश करेंगे।

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

this बलात्कार, वैश्विक वस्तु होने का सबसे सुविधाजनक तरीका हो सकता है अर्थात दोनों ब्राउज़र और नोड में

const global = Function('return this')()

काम करता है, यहां तक ​​कि कठोर मोड में।

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

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