ईसीएमएसक्रिप्ट ऑब्जेक्ट स्कोप

क्षेत्र अवयव के उपयोगी क्षेत्र को कहते हैं।

सार्वजनिक, निजी और संरक्षित क्षेत्र

कानून

पारंपरिक दिशा-रेखा तत्व योग्य कोडिंग में, मुख्य रूप से सार्वजनिक और निजी क्षेत्रों पर ध्यान केंद्रित किया जाता है।सार्वजनिक क्षेत्र के ऑब्जेक्ट गुण ऑब्जेक्ट के बाहर से अभिगम्य होते हैं, अर्थात डेवलपर ऑब्जेक्ट की इनस्टांस करने के बाद, उसके सार्वजनिक गुणों का उपयोग कर सकते हैं।निजी क्षेत्र के गुण ऑब्जेक्ट के अंदर से ही अभिगम्य होते हैं, अर्थात बाहरी दुनिया के लिए इन गुणों को मौजूद नहीं होते।इसका मतलब है कि यदि किसी क्लास में निजी गुण और विधियाँ परिभाषित की गई हैं, तो उसके उप-क्लास भी इन गुणों और विधियों को अभिगम्य नहीं होंगे。

संरक्षित क्षेत्र भी निजी गुण और विधियों को परिभाषित करने के लिए उपयोग किया जाता है, लेकिन इसके अलावा ये गुण और विधियाँ उसके उप-क्लासों द्वारा भी अभिगम्य हैं。

ECMAScript केवल सार्वजनिक क्षेत्र है

ECMAScript में उपरोक्त गुणों पर ECMAScript की चर्चा करना लगभग अर्थहीन है, क्योंकि ECMAScript में केवल एक ही क्षेत्र है - सार्वजनिक क्षेत्र।ECMAScript के सभी ऑब्जेक्ट के सभी गुण और विधियाँ सार्वजनिक हैं।इसलिए, अपने क्लास और ऑब्जेक्ट को परिभाषित करते समय, अत्यधिक सावधानी रखनी चाहिए।याद रखें कि सभी गुण और विधियाँ डिफ़ॉल्ट से सार्वजनिक हैं!

सुझावी समाधान

अनेक डेवलपरों ने ऑनलाइन बहुत से प्रभावी गुण क्षेत्र मॉडल प्रस्तावित किए हैं, जो ECMAScript की इस समस्या को हल करते हैं。

निजी क्षेत्र की कमी के कारण, डेवलपर एक नियम निर्धारित कर चुके हैं, जो कहता है कि कौन-से गुण और विधियों को निजी माना जाना चाहिए।यह नियम गुण के आस-पास नीचे की लकीर लगाने के रूप में निर्धारित किया गया है:

obj._color_ = "blue";

इस कोड में, गुण color निजी है।ध्यान दें, नीचे की लकीर गुण को सार्वजनिक गुण मानने की बात नहीं बदलती, यह केवल अन्य डेवलपरों को संदेश देती है कि उन्हें इस गुण को निजी मानना चाहिए।

कुछ डेवलपर अभी एकल निशान के साथ निजी सदस्यों को दर्शाना पसंद करते हैं, उदाहरण के लिए obj._color।

स्टैटिक कार्यक्षेत्र

स्टैटिक कार्यक्षेत्र द्वारा परिभाषित गुण और विधियाँ कभी-कभी एक ही स्थान से आगे आगे आगे एक्सेस की जा सकती हैं।Java में, क्लास के गुण और विधियाँ को उस क्लास के ऑब्जैक्ट को विन्यास किए बिना एक्सेस किए जा सकते हैं, उदाहरण के लिए java.net.URLEncoder क्लास, जिसकी encode() फ़ंक्शन स्टैटिक फ़ंक्शन है。

ECMAScript में स्टैटिक कार्यक्षेत्र नहीं है

सचमुच ECMAScript में स्टैटिक कार्यक्षेत्र नहीं है।हालाँकि, यह बनार फ़ंक्शन को गुण और विधियाँ प्रदान कर सकता है।याद करें, बनार फ़ंक्शन केवल फ़ंक्शन हैं।फ़ंक्शन ऑब्जैक्ट है, और ऑब्जैक्ट के गुण और विधियाँ हो सकती हैं।उदाहरण के लिए:

function sayHello() {
  alert("hello");
}
sayHello.alternate = function() {
  alert("hi");
}
sayHello();		//आउटपुट "hello"
sayHello.alternate();	//आउटपुट "hi"

TIY

यहाँ, alternate() विधि वास्तव में sayHello() फ़ंक्शन की विधि है।sayHello() को आम फ़ंक्शन की तरह बुलाकर "hello" आउटपुट कर सकते हैं, या sayHello.alternate() को बुलाकर "hi" आउटपुट कर सकते हैं।भले ही इस तरह हो, alternate() भी sayHello() के सामान्य कार्यक्षेत्र की विधि है, न कि स्टैटिक विधि。

चाइन की शब्द this

this का काम

ECMAScript में, सबसे महत्वपूर्ण अवधारणाओं में से एक चाइन की शब्द this का इस्तेमाल है, जो ऑब्जैक्ट की विधियों में इस्तेमाल की जाती है।चाइन की शब्द this हमेशा उस ऑब्जैक्ट की ओर संकेत करती है जो विधि को बुलाता है, उदाहरण के लिए:

var oCar = new Object;
oCar.color = "red";
oCar.showColor = function() {
  alert(this.color);
};
oCar.showColor();		//आउटपुट "red"

TIY

इस कोड में, चाइन की शब्द this ऑब्जैक्ट के showColor() विधि में इस्तेमाल की जाती है।इस माहौल में, this अभी oCar से समान है।नीचे दिए गए कोड उपरोक्त कोड के समान काम करता है:

var oCar = new Object;
oCar.color = "red";
oCar.showColor = function() {
  alert(oCar.color);
};
oCar.showColor();		//आउटपुट "red"

TIY

this का इस्तेमाल करने के कारण

इसके लिए इस्तेमाल क्यों किया जाता है? क्योंकि ऑब्जैक्ट विन्यास करते समय, हमें हमेशा पता नहीं होता कि डेवलपर क्या वेरियेबल नाम इस्तेमाल करेंगे।इसके लिए this का इस्तेमाल करके, एक ही फ़ंक्शन कई जगहों पर दोबारा इस्तेमाल किया जा सकता है।इस दृष्टि से नीचे दिए गए उदाहरण पर विचार करें:

function showColor() {
  alert(this.color);
};
var oCar1 = new Object;
oCar1.color = "red";
oCar1.showColor = showColor;
var oCar2 = new Object;
oCar2.color = "blue";
oCar2.showColor = showColor;
oCar1.showColor();		//आउटपुट "red"
oCar2.showColor();		//आउटपुट "blue"

TIY

ऊपरी दिए गए कोड में, पहले this से फ़ंक्शन showColor() को परिभाषित किया गया है, फिर दो ऑब्जैक्ट (oCar1 और oCar2) बनाए गए हैं, एक के color गुण को 'red' और दूसरे के color गुण को 'blue' सेट किया गया है।दोनों ऑब्जैक्ट को showColor गुण दिया गया है, जो मूलीय शोवकोलर () फ़ंक्शन को संदर्भित करता है (यहाँ नामकरण समस्या नहीं है, क्योंकि एक वैश्विक फ़ंक्शन है और दूसरा ऑब्जैक्ट का गुण है)।oCar1.showColor() को बुलाया जाता है, oCar1 आउटपुट 'red' होगा, और oCar2 का आउटपुट 'blue' होगा।यह इसलिए है क्योंकि oCar1.showColor() को बुलाया जाता है तब, फ़ंक्शन में this की मुख्यशब्द के बराबर oCar1 है।oCar2.showColor() को बुलाया जाता है तब, फ़ंक्शन में this की मुख्यशब्द के बराबर oCar2 है।

ध्यान दें, ऑब्जैक्ट की गुण को उपयोग में लेने के लिए this की मुख्यशब्द का उपयोग करना आवश्यक है।उदाहरण के लिए, अगर नीचे दिए गए कोड को उपयोग में लिया जाता, showColor() विधि चलेगी नहीं:

function showColor() {
  alert(color);
};

यदि ऑब्जैक्ट या this की मुख्यशब्द को उपयोग में नहीं लिया जाता, तो ECMAScript इसे स्थानीय या वैश्विक वेरियेबल मानेगा।तब फ़ंक्शन नाम 'color' के स्थानीय या वैश्विक वेरियेबल को खोजेगा, लेकिन नहीं खोज पाएगा।परिणाम क्या होगा? फ़ंक्शन 'null' अलर्ट में दिखाएगा。