नेमस्पेस प्रदूषण से बचना
जावास्क्रिप्ट फंक्शन ओवरलोडिंग का समर्थन नहीं करता। इसलिए जब समान नाम वाले किन्हीं दो फंक्शन्स का उपयोग किया जाता है, तो एक फंक्शन दूसरे को ओवरराइड कर देगा, यह इस बात पर निर्भर करता है कि ये फंक्शन्स किस क्रम में लोड हो रहे हैं। इसका अर्थ है कि जावास्क्रिप्ट में नेमस्पेस (नामकरण परंपरा) का अभाव है। हालांकि, हम नेम कोलिजन से बचने के लिए नेमस्पेस बनाने के लिए ऑब्जेक्ट्स का उपयोग कर सकते हैं।
var Tutorix = Tutorix || {};
उपरोक्त कोड की पंक्ति कहती है कि यदि Tutorix ऑब्जेक्ट पहले से मौजूद है तो उसका उपयोग करें, अन्यथा एक नया ऑब्जेक्ट बनाएं।
हम नेस्टेड नेमस्पेस भी बना सकते हैं यानी एक नेमस्पेस के अंदर दूसरा नेमस्पेस।
var Tutorix = Tutorix || {}; Tutorix.TeamA1 = Tutorix.TeamA1 || {};
उपरोक्त कोड की पंक्तियों में दूसरी पंक्ति सुझाव देती है कि यदि TeamA1 पहले से मौजूद है तो उस ऑब्जेक्ट का उपयोग करें, अन्यथा एक खाली TeamA1 ऑब्जेक्ट बनाएं।
निम्नलिखित उदाहरण में भले ही हम HTML फ़ाइल में केवल 2 पैरामीटर्स पास कर रहे हों, हमें आउटपुट में 3 पैरामीटर्स मिल रहे हैं। यह नेमस्पेस कोलिजन के कारण है जो Team1 और Team2 के बीच होता है (दोनों समान फंक्शन नाम "student" साझा कर रहे हैं)।
TeamA1.js
<html> <body> <script> function student(Fname,Lname){ this.Fname = Fname; this.Lname = Lname; This.getFullName = function(){ return this.Fname + " " + this.Lname; } } </script> </body> </html>
TeamA2.js
<html> <body> <script> function student(Fname, Mname, Lname){ this.Fname = Fname; this.Mname = Mname; this.Lname = Lname; This.getFullName = function(){ return this.Fname + " " + this.Mname + " " + this.Lname; } } </script> </body> </html>
HTML फ़ाइल
<html> <head> <script type = "javascript" src = "TeamA1.js"></script> <script type = "javascript" src = "TeamA2.js"></script> </head> <body> <div id = "resultDiv"></div> <script> document.getElementById("resultDiv").innerHTML = new student("Rajendra", "prasad").getFullName(); </script> </body> </html>
आउटपुट
Rajendra prasad undefined.
चूंकि TeamA1.js और TeamA2.js के बीच नेमस्पेस कोलिजन होता है, भले ही हमने TeamA1.js एक्सेस करने के लिए केवल 2 पैरामीटर्स "Rajendra" और "prasad" भेजे हों, हमें आउटपुट में 3 पैरामीटर्स "Rajendra prasad undefined" मिले। ऐसा इसलिए है क्योंकि 3 पैरामीटर्स वाले TeamA2.js ने TeamA1.js को ओवरराइड कर दिया।
इस प्रकार के नेम कोलिजन से बचने के लिए हमें ऑब्जेक्ट्स का उपयोग करके नेमस्पेस बनाने होंगे।
TeamA1.js
निम्नलिखित कोड में नेमस्पेस TeamA1 को Tutorix नामक दूसरे ऑब्जेक्ट का उपयोग करके बनाया गया है।
<html> <body> <script> var Tutorix = Tutorix || {}; Tutorix.TeamA1 = Tutorix.TeamA1 || {}; Tutorix.TeamA1.student = function (Fname, Lname){ this.Fname = Fname; this.Lname = Lname; this.getFullName = function(){ return this.Fname + " " + this.Lname; } return this; } </script> </body> </html>
TeamA2.js
निम्नलिखित कोड में नेमस्पेस TeamA2 को Tutorix नामक दूसरे ऑब्जेक्ट का उपयोग करके बनाया गया है।
<html> <body> <script> var Tutorix = Tutorix || {}; Tutorix.TeamA2 = Tutorix.TeamA2 || {}; Tutorix.TeamA2.student = function (Fname, Mname, Lname){ this.Fname = Fname; this.Mname = Mname; this.Lname = Lname; this.getFullName = function(){ return this.Fname + " " + this.Mname + " " + this.Lname; } return this; } </script> </body> </html>
HTML फ़ाइल
HTML फ़ाइल में दोनों js फ़ाइल्स (TeamA1.js और TeamA2.js) शामिल करें।
<html> <head> <script type = "javascript" src = "TeamA1.js"></script> <script type = "javascript" src = "TeamA2.js"></script> </head> <body> <script> document.write(window.Tutorix.TeamA1.student("Rajendra", "prasad").getFullName()); document.write(window.Tutorix.TeamA2.student("Babu","Rajendra","prasad").getFullName()); </script> </body> </html>
आउटपुट
Rajendra prasad Babu Rajendra prasad
उपरोक्त उदाहरण में, हमने नेस्टेड नेमस्पेस का उपयोग किया है यानी Tutorix नेमस्पेस में हमने TeamA1 और TeamA2 को नेस्ट किया है ताकि नेम कोलिजन से बचा जा सके। चूंकि नेमस्पेस कोलिजन टल गया है, हमें प्रत्येक व्यक्तिगत स्क्रिप्ट के लिए आउटपुट मिला है।