2012-04-05 15 views
8

कोड के निम्नलिखित पंक्तियों का मुकाबला करने के बारे में उलझन में, लेकिन इसे समझ में नहीं आया।इस जावास्क्रिप्ट पैटर्न

यह क्या है (/ ... /) (यह); जावास्क्रिप्ट में उद्देश्य? क्या इस पैटर्न के लिए इसका नाम है? नीचे के रूप में

कोड:

//Move.js 
(function(exports){ 
    exports.Move = function(){ 

    }; 
})(this); 
+0

इस की जाँच का मतलब कक्षा या वस्तु लेकिन संदर्भ। किसी भी जावास्क्रिप्ट फ़ंक्शन को वैसे भी कहा जा सकता है, और आप इस डायनामिक रूप से मूल्य बदल सकते हैं। उस उदाहरण में, यह सिर्फ एक फ़ंक्शन बना रहा है, इसे तुरंत कॉल कर रहा है और निर्यात तर्क को इसके मान को असाइन कर रहा है। इसलिए संक्षेप में यह फ़ंक्शन परिभाषा है और उसके बाद पैरामीटर के रूप में कॉल करने का कार्य करता है। – mpm

+0

@ कैमस- यह एक बहुत भ्रमित स्पष्टीकरण है। एक फ़ंक्शन का * यह * मान वास्तव में गतिशील नहीं है, यह फ़ंक्शन कहलाता है और बाद में बदला नहीं जा सकता है। – RobG

+0

यदि आपने मुझे अच्छी तरह पढ़ा है, तो मैंने गतिशील कार्य के संदर्भ के बारे में बात की है।यह वास्तव में गतिशील है क्योंकि यह एक मान पर सेट नहीं है, लेकिन इस पर निर्भर करता है कि फ़ंक्शन को कैसे कहा जाता है। स्पष्टीकरण बहुत स्पष्ट है। यह एक संदर्भ का संदर्भ नहीं देता है, इसलिए यह गतिशील है। – mpm

उत्तर

5

यह पैटर्न एक "Immediately Invoked Function Expresssion" है। संक्षेप में, यह केवल एक समारोह है जिसे तुरंत निष्पादित किया जाता है। अंत पर this एक पैरामीटर भीतरी समारोह है कि के रूप में exports

(function(exports){ 

    //that was "this" outside, is now "exports" in here 

}(this)); 
अपने उदाहरण में

पहुँचा जा जाएगा करने के लिए भेजा जा रहा है, हम मान सकते हैं कि जो कुछ भी this था, यह किसी वस्तु है कि एक Move विधि जोड़ दिया गया है है इसके लिए

कुछ इस पैटर्न को "Module Pattern" कहते हैं, यह एक अर्थ में है कि यह "निहित वातावरण" बनाता है ताकि उसके अंदर की सामग्री एक नए फ़ंक्शन स्कोप के कारण दिखाई न दे। दूसरे शब्दों में, जो कुछ भी अंदर है वह बाहर देखता है, लेकिन बाहरी केवल यह देख सकता है कि अंदरूनी

+0

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

+0

* मैंने यह नहीं कहा * कि मेरा कोड मॉड्यूल पैटर्न का एक उदाहरण है। मेरा कोड वहां बस 'यह' फ़ंक्शन के अंदर 'निर्यात' बन रहा है। मैंने मॉड्यूल पैटर्न का एक उदाहरण शामिल नहीं किया क्योंकि हर किसी के पास इसे बनाने की अपनी शैली है। – Joseph

+0

हम्म..जब मैं इसके बारे में सोचता हूं। विभिन्न निर्यात = फ़ंक्शन() {// bla} के साथ उपरोक्त कोड के साथ अलग क्या है। 'Var export' का उपयोग करके – TonyTakeshi

3

यही पैटर्न बस exports निष्पादन के समय this करने के लिए आवंटित कर देता है।

वैश्विक दायरे और ब्राउज़र को मानते हुए, thiswindow ऑब्जेक्ट को इंगित करेगा।

दिमाग में उन धारणाओं के साथ, window.Move में उस IIFE (तुरंत आमंत्रित फ़ंक्शन अभिव्यक्ति) के अंदर असाइन किया गया फ़ंक्शन होना चाहिए।

इस समारोह एक अलग संदर्भ में कहा जाता था कि कहां से thisनहींwindow है, यह है कि विधि जो कुछ भी करने के लिए this बाहरी वातावरण में किया गया था आवंटित करेगा।

+0

शायद यह कहना बेहतर है कि वैश्विक कोड में, * यह * हमेशा वैश्विक वस्तु का संदर्भ देता है। कुछ वातावरण (उदा। ब्राउज़र) में एक * विंडो * ऑब्जेक्ट भी है जो अनिवार्य रूप से एक ही ऑब्जेक्ट (लेकिन हो सकता है) नहीं है, इसलिए * यह * वैश्विक संदर्भ संदर्भ * विंडो * में भी है। – RobG

1

इस पैटर्न को "मॉड्यूल पैटर्न" कहा जाता है। विभिन्न उप पैटर्न हैं और यह एक Augmented मॉड्यूल पैटर्न का इस्तेमाल किया।

सबसे पहले, हम मॉड्यूल आयात करते हैं, फिर हम गुण जोड़ते हैं, फिर हम निर्यात करते हैं। यहाँ एक उदाहरण है, ऊपर से हमारे मॉड्यूल बढ़ाने:

http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

की जाँच इस मॉड्यूल पैटर्न के बारे में अधिक पढ़ने के लिए सामान्य जावास्क्रिप्ट पैटर्न के बारे में अधिक पढ़ने के लिए जावास्क्रिप्ट नहीं करता में http://addyosmani.com/resources/essentialjsdesignpatterns/book/

+0

http://addyosmani.com/resources/essentialjsdesignpatterns/book/ एक बहुत अच्छा, विस्तृत, और कई उदाहरणों के साथ, बिल्कुल पढ़ना चाहिए! – sMyles

संबंधित मुद्दे