ES6 गेटर्स और सेटर्स की जावा में समान अवधारणाओं की तुलना में काफी अलग प्रेरणा है।
जावा में, गेटर्स और सेटर एक वर्ग को जावाबीन को परिभाषित करने की अनुमति देते हैं। गेटर्स और सेटर की बात यह है कि यह बीन को सार्वजनिक क्षेत्रों से निहित पूरी तरह से ऑर्थोगोनल "इंटरफ़ेस" की अनुमति देता है। तो मेरे पास एक फ़ील्ड "नाम" हो सकता है जो कि एक JavaBean प्रॉपर्टी नहीं है, और मेरे पास एक JavaBean प्रॉपर्टी "पता" हो सकता है जो एक फ़ील्ड नहीं है।
जावा प्रतिबिंब के माध्यम से जावा के गुण हजारों चौखटे (उदाहरण के लिए हाइबरनेट) द्वारा "खोजे जाने योग्य" भी हैं। इस प्रकार, गेटर्स और सेटर बीन गुणों को "उजागर" करने के लिए एक मानक विधि का हिस्सा हैं।
गेटर्स और सेटर, फ़ंक्शंस होने के कारण, यह भी मूल्य है कि वे कार्यान्वयन को "अमूर्त" करते हैं। यह एक क्षेत्र या एक गणना ("सिंथेटिक") मूल्य ग्रहण कर सकता है। इसलिए अगर मेरे पास "zipcode" नामक सेम संपत्ति है, जो संग्रहीत स्ट्रिंग के रूप में शुरू होती है। अब मान लें कि मैं इसे पते / शहर / राज्य से गणना मूल्य में बदलना चाहता हूं?
यदि मैं किसी फ़ील्ड का उपयोग करता हूं, तो यह कोड टूट जाता है:
String zipcode = address.zipcode();
लेकिन अगर मैं एक गटर का उपयोग करता हूं, तो यह नहीं टूटता:
String zipcode = address.getZipcode();
जावास्क्रिप्ट में JavaBeans जैसा कुछ भी नहीं है। अब तक मैंने पढ़ा है, GET और SET का इच्छित मूल्य "सिंथेटिक" (गणना) गुणों के लिए सीमित है।
लेकिन यह जावा की तुलना में कुछ हद तक बेहतर है, जबकि जावा आपको "फ़ील्ड" को एक विधि में परिवर्तित करने की अनुमति नहीं देता है, ES6 GET और SET इसकी अनुमति देता है।
यही कारण है, अगर मेरे पास है:
var zipcode = address.zipcode;
यदि मैं एक ऑब्जेक्ट को एक मानक ऑब्जेक्ट प्रॉपर्टी से एक गटर में बदल देता हूं, तो उपरोक्त कोड अब GET फ़ंक्शन को कॉल करता है।
ध्यान दें कि अगर मैंने परिभाषा में GET को शामिल नहीं किया है, तो यह zipcode GET विधि को लागू नहीं करेगा। इसके बजाय, यह केवल फ़ंक्शन zipcode को var को असाइन करेगा।
इसलिए मुझे लगता है कि बेटवे जावा और जावास्क्रिप्ट ईएस 6 गेटर्स और सेटर्स को समझने के लिए ये कुछ महत्वपूर्ण अंतर हैं।