एरो फ़ंक्शंस को हर स्थिति में केवल पुराने जमाने के फ़ंक्शंस के छोटे संस्करण के रूप में उपयोग करने के लिए डिज़ाइन नहीं किया गया है। वे 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
ऑब्जेक्ट को संदर्भित नहीं करेगा ।