2010-03-05 8 views
7

नामस्थान एक बार ईसीएमएस्क्रिप्ट (पुराना ईसीएमएस्क्रिप्ट 4) के लिए विचार कर रहे थे लेकिन उन्हें बाहर निकाला गया था। ब्रेंडन Eich this message में कहते हैं:ईसीएमएस्क्रिप्ट विचार से नामस्थान क्यों हटा दिए गए थे?

ES4 में नामस्थान के लिए उपयोग-मामले में से एक, जल्दी बाध्यकारी (प्रयोग नाम स्थान आंतरिक) था दोनों प्रदर्शन के लिए और प्रोग्रामर समझ के लिए - क्रम नाम का कोई मौका बाइंडिंग किसी भी पहले बाइंडिंग से असहमत है। लेकिन किसी भी में प्रारंभिक बाध्यकारी जैसे गतिशील कोड लोडिंग परिदृश्य को वेब को आरक्षण तंत्र की आवश्यकता होती है ताकि से बचने के लिए देर से बाध्यकारी संघर्ष हो।

इसके अलावा, के रूप में कुछ जे एस कार्यान्वयन करने वालों चिंता के साथ उल्लेख किया है, कई खुला
नामस्थान क्रम लागत थोपना जब तक एक कार्यान्वयन काम करता है
काफी कठिन।

इन कारणों से, नामस्थान और प्रारंभिक बाध्यकारी (जैसे
से पहले पैकेज, उन्हें पिछले अप्रैल) जाना चाहिए।

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

इसके अलावा, नेमस्पेस रनटाइम लागत क्यों लगाएंगे? मेरे दिमाग में मैं मदद नहीं कर सकता लेकिन बंदस्थान का उपयोग करके एक नामस्थान और एक समारोह के बीच अवधारणा में थोड़ा अंतर देख सकता हूं। उदाहरण के लिए, याहू और Google दोनों में याहू और Google ऑब्जेक्ट्स हैं जो नामस्थानों की तरह "कार्य करते हैं" जिसमें वे अपने सभी सार्वजनिक और निजी चर, फ़ंक्शंस और ऑब्जेक्ट्स को एक ही एक्सेस पॉइंट के भीतर रखते हैं। तो फिर, कार्यान्वयन में नामस्थान इतना महत्वपूर्ण क्यों होगा? हो सकता है कि मुझे सिर्फ एक गलत धारणा है कि नामस्थान वास्तव में क्या है।

  1. एक namespace जल्दी बंधन की आवश्यकता है:

    इनाम मैं चाहूँगा की खातिर दो बातें पता करने के लिए?

  2. नामस्थान कार्यान्वयन निजी सदस्यों के साथ किसी ऑब्जेक्ट से भिन्न कैसे होता है?

उत्तर

2

यदि आप किसी फ़ंक्शन की परिभाषा के बाद एक बंदरगाह घोषित करते हैं तो उस चर को कॉल किया जाएगा, यह अभी भी स्कोप्ड चर का उपयोग करता है।

function ShowMe() { 
    alert(myVar); //alerts "cool" 
} 

var myVar = "cool";

इस प्रक्रिया को नेमस्पेसिंग के संबंध में जटिल की एक और परत मिल जाएगी।

इसके अलावा विस्तार/आवेदन आदि के साथ कई नामस्थान विधियां हैं जो बहुत सारी कार्यक्षमता कर सकती हैं। ExtJS में नेमस्पेस(), या उदाहरण के लिए jQuery में $ .extend। तो, यह अच्छा होना हो सकता है, लेकिन भाषा की संरचनाओं में पूर्ण आवश्यकता नहीं है। मुझे लगता है कि ऐरे के कुछ एक्सटेंशन को औपचारिक बनाना, और तिथि में आईएसओ -8601 तिथियों के लिए समर्थन मेरे लिए कहीं अधिक महत्वपूर्ण है। परिभाषा के लिए बस प्रत्येक नेमस्पेस परत को जांचने के लिए ...

window.localization = $.extend(window.localization || {}, { 
    ... 
}); 

window.localization.en = $.extend(window.localization.en || {}, { 
    ... 
});
+0

मुझे भी लगता है कि ध्यान केंद्रित करने के लिए और भी महत्वपूर्ण चीजें हैं, लेकिन मैंने यह पूछा क्योंकि मुझे दिए गए कारणों को समझ में नहीं आता है। यहां भी आप ईसीएमएस्क्रिप्ट में नेमस्पेस इम्यूलेशन के उदाहरण देते हैं, इसलिए मैं भी उलझन में हूं कि नेमस्पेस एक बुरा विचार क्यों होगा – Bob

1

ठीक पहले शब्दावली में से कुछ:

  • प्रारंभिक बंधन - चेक/मान्य जब कोड की पंक्ति पार्स किया गया है।
  • देर बाध्यकारी - कोड की लाइन निष्पादित होने पर जांच/सत्यापित करें।
  • प्राथमिकता/आरक्षण - मुझे लगता है कि उनका मतलब है कि यदि आप प्रारंभिक बाध्यकारी करते हैं और नाम रिक्त स्थान की जांच करते हैं तो कोड को पार्स किया जाता है, तो चर वैरिएबल को बाद में जोड़ा जाता है और एक अलग सेट के बाद एक चर नाम को सत्यापित करने की प्रक्रिया होनी चाहिए इस बिंदु पर शामिल कई स्कॉप्स के रूप में मान्य होने के लिए नियम क्या हैं।

मुझे आश्चर्य है कि केवल इन तकनीकी कारणों को ही दिया गया था। सामान्य मामला लें: -

onclick=' var mymark = "donethat";' 

क्या नामस्थान "mymark" होना चाहिए? उस प्रश्न का कोई आसान जवाब प्रतीत नहीं होता है। विशेष रूप से कोड स्निपेट दिया गया: -

window.forms.myform.mybutton.onClick = ' var mymark = "donethat";' 

वैरिएबल को उसी नाम स्थान में रखना चाहिए।