मैं हाल ही में node.js के साथ टकरा रहा हूं और मैं मॉड्यूल के वैश्विक दायरे में this
के उपयोग के बारे में एक अजीब व्यवहार में भाग गया।node.js: वैश्विक दायरे में 'इस' का भ्रमित उपयोग
this
वैश्विक क्षेत्र में module.exports के लिए बाध्य है:
console.log(this === exports); // -> true
लेकिन this
एक विधि दायरे में वैश्विक के लिए बाध्य है:
(function() { console.log(this === global); })(); // -> true
यह भी इस उलझनपूर्ण व्यवहार हो:
this.Foo = "Weird";
console.log(Foo); // -> throws undefined
(function() { this.Bar = "Weird"; })();
console.log(Bar); // -> "Weird"
मुझे लगता है कि समाधान टी नहीं है o वैश्विक दायरे में this
का कभी भी उपयोग न करें और इसके बजाय extends
या global
का उपयोग करें, लेकिन क्या यह सब के पीछे एक तर्क है या यह node.js में एक बग या सीमा है?
यदि वैश्विक स्तर पर 'यह' 'विस्तार 'के बजाय' वैश्विक 'तक सीमित था तो यह कम भ्रमित नहीं होगा? मैं उम्मीद करता हूं कि 'वैश्विक' का मतलब वैश्विक दायरे और स्थिर कार्यक्षेत्र में भी होगा। –
@ सेल्फलेस कोडर: मैं ईमानदारी से नहीं जानता कि यह 'निर्यात' वस्तु से क्यों जुड़ा हुआ है। लेकिन आम तौर पर यह एक अच्छा विचार है कि वैश्विक वस्तु को डेटा के साथ छेड़छाड़ न करें। इसलिए, केवल ध्यान रखें कि किसी भी फ़ंक्शन-संदर्भ में इसे अलग-अलग 'यह' मान हो सकता है, इस पर निर्भर करता है कि इसे कैसा कहा जाता है। – jAndy
जैसा कि जैंडी कहते हैं, यह मूल रूप से जावास्क्रिप्ट में कैसे काम करता है। मैंने इस पर कोई चर्चा नहीं पढ़ी है, लेकिन मुझे लगता है कि वैश्विक दायरे में 'यह === निर्यात' होने पर ब्राउज़र में वैश्विक दायरे में '=== विंडो 'के अनुरूप होना चाहिए। आईएमओ, वैश्विक दायरे में 'यह === वैश्विक' होने से कम समझ में आता है, क्योंकि इसका मतलब यह होगा कि 'this.foo === foo'। –