एरो फ़ंक्शंस को हर स्थिति में केवल पुराने जमाने के फ़ंक्शंस के छोटे संस्करण के रूप में उपयोग करने के लिए डिज़ाइन नहीं किया गया है। वे functionकीवर्ड का उपयोग करके फ़ंक्शन सिंटैक्स को बदलने के लिए अभिप्रेत नहीं हैं । तीर के कार्यों के लिए सबसे आम उपयोग का मामला छोटा "लंबोदा" है जो फिर से परिभाषित नहीं करता है this, अक्सर किसी फ़ंक्शन को कॉलबैक के रूप में किसी फ़ंक्शन को पास करते समय उपयोग किया जाता है।
एरो फ़ंक्शंस का उपयोग ऑब्जेक्ट विधियों को लिखने के लिए नहीं किया जा सकता है, क्योंकि जैसा कि आपने पाया है, क्योंकि एरो फ़ंक्शन thisलेक्सिकली एन्क्लोज़िंग संदर्भ के करीब है, thisएरो के भीतर वह एक है जो वर्तमान था जहां आपने ऑब्जेक्ट को परिभाषित किया था। जिसका मतलब है:
var chopper = {
owner: 'Zed',
getOwner: () => {
return this.owner;
}
};
आपके मामले में, किसी ऑब्जेक्ट पर एक विधि लिखना चाहते हैं, तो आपको बस पारंपरिक functionसिंटैक्स का उपयोग करना चाहिए , या ईएस 6 में पेश किया गया सिंटैक्स:
var chopper = {
owner: 'Zed',
getOwner: function() {
return this.owner;
}
};
var chopper = {
owner: 'Zed',
getOwner() {
return this.owner;
}
};
(उनके बीच छोटे अंतर हैं, लेकिन वे केवल महत्वपूर्ण हैं यदि आप उपयोग करते superहैं getOwner, जो आप नहीं हैं, या यदि आप getOwnerकिसी अन्य ऑब्जेक्ट पर कॉपी करते हैं।)
एस्क फ़ंक्शंस पर एक मोड़ के बारे में es6 मेलिंग सूची पर कुछ बहस हुई थी जिसमें समान सिंटैक्स है लेकिन अपने स्वयं के साथ this। हालाँकि, इस प्रस्ताव को खराब रूप से प्राप्त किया गया था, क्योंकि यह मात्र सिंटेक्स चीनी है, जिससे लोग कुछ वर्णों को टाइप करने से बचा सकते हैं, और मौजूदा फ़ंक्शन सिंटैक्स पर कोई नई कार्यक्षमता प्रदान नहीं कर सकते हैं। विषय अनबाउंड एरो फ़ंक्शन देखें ।
thisअलग तरह से व्यवहार करता है । यह शाब्दिक वातावरण द्वारा परिभाषित किया गया है जिसमें फ़ंक्शन बनाया गया था, जिसका अर्थ हैthisकि आपchopperचर बनाते हैं जहांthisमान फ़ंक्शन का मूल्य होगा । दूसरे शब्दों में, यहchopperऑब्जेक्ट को संदर्भित नहीं करेगा ।