मैं इसे एक भाषा डिजाइन बिंदु से पूछ रहा हूं। इसलिए मैंजावास्क्रिप्ट में 'इस' कीवर्ड के व्यवहार के लिए तर्क क्या है?
this
के व्यवहार के लिए तर्क क्या है?this
का व्यवहार किस गिनती थी, या उस पर सुधार किया जा सकता था?
स्पष्ट करने के लिए कारण है कि मैं this
को लेकर असहज कर रहा हूँ, पर विचार इस उदाहरण: f()
हैं
var a = {};
a.f = function(){ return this; }
var f = a.f;
// f() != a.f()
नोट कितनी आसानी से वस्तु जो करने के लिए खो दिया है: a
से अलग कर दिया, this
वैश्विक हो जाता है ऑब्जेक्ट (window
ब्राउज़रों के लिए)।
अब विचार करें:
var newA = function(){
var self = {};
self.f = function(){ return self; }
return self;
}
var a = newA();
var f = a.f;
// f() == a.f() !
बिल्कुल this
का उपयोग कर के बिना, हम जहां या कैसे विधि का इस्तेमाल किया जाता है की परवाह किए बिना की स्थापना और वस्तु संदर्भ बनाए रखने में सक्षम हैं। मैं मदद नहीं कर सकते लेकिन लगता है कि, शक्ति है कि बंद प्रदान के साथ, this
ज़रूरत से ज़्यादा, और शायद यह भी एक छोटे से खतरनाक हो जाता है ...
मैं कुछ बदले की भावना पर this
के खिलाफ नहीं हूँ, या एक बहस शुरू करने के लिए देख; मैं बस इसे बेहतर समझने की कोशिश कर रहा हूं। मैं सराहना करता हूं कि 'यह' उपयोगी हो सकता है, लेकिन it can be confusing को भी पहचानें ... निश्चित रूप से शुरुआती लोगों के लिए भ्रमित, और शायद विशेषज्ञों के साथ-साथ पर्याप्त अस्पष्ट मामलों में भी।
और फिर भी, यह भाषा का भारी उपयोग और प्रतीत होता है, इस समय भाषा के अन्य मूल पहलुओं को चमकदार (यानी, क्रॉकफोर्ड और with
या new
) के लिए उचित खेल लगता है। मुझे तब क्या याद आ रहा है, जो this
अनिवार्य बनाता है?
आपको यह इंप्रेशन देता है कि "यह" एक गलती है? –
@ गैमेकैट: आपने कभी जावास्क्रिप्ट के समान भाषा तैयार करने की कोशिश नहीं की है, है ना? – artificialidiot
मुझे अभी भी लगता है कि यह तर्कवादी है। भाषा एक समस्या का तात्पर्य है, सीएफ "यह कितना अद्भुत है 'यह' (यदि यह अद्भुत है)" – annakata