2010-12-10 14 views
6

मैंने जावास्क्रिप्ट में इस पैटर्न का उपयोग करना शुरू कर दिया है। मुझे यकीन नहीं है कि अगर मैं इसके बारे में विशेष रूप से पढ़ता हूं, या अगर मैंने इसे एक दिन स्वीकार किया है।मैंने इस जावास्क्रिप्ट पैटर्न का उपयोग करना शुरू कर दिया है। क्या इसमें कुछ गड़बड़ है?

प्रारूप है ...

var name = (function() { 

    var init = function() { 
     // Init something 
     $('a').click(show); 
    }; 

    var show = function() { 
     // Show something 
    }; 

    $(init); 

})(); 

और यहाँ एक वास्तविक दुनिया उदाहरण है ...

var contactForm = (function() { 
    var init = function() { 

     if (! $('body').hasClass('contact')) { 
      return; 
     }; 

     var form = $('.contact #content form'); 

     form.validate({ 
       rules: { 
        'full-name': { 
         required: true 
        },  
        'email': { 
         required: true, 
         email: true 
        },  
       }, 
       messages: { 
        'email': { 
         email: 'Please make sure this email is valid.' 
        } 

      } 
      }); 

    }; 

    $(init); 

})(); 

क्या इस के साथ गलत है?

+0

चर (* नाम, संपर्कफॉर्म *) का उपयोग क्यों करें क्योंकि आप फ़ंक्शन से कुछ भी वापस नहीं करते हैं (* और आप इसे तुरंत कॉल करते हैं *)? क्यों न केवल उस हिस्से को छोड़ दें? या यह आपके लिए एक बुकमार्क के रूप में है? –

+0

@ गैबी बस इतना है कि मैं स्पष्ट रूप से देख सकता हूं कि प्रत्येक कार्य क्या करता है, और यह डिबगिंग के साथ मदद करता है। मुझे लगता है कि वे टिप्पणी कर सकते हैं, लेकिन फिर मेरा स्टैक ट्रेस कुछ अज्ञात कार्यों को दिखाएगा। – alex

+2

इसे मिला। निफ्टी अवधारणा। –

उत्तर

0

नहीं। मैं वास्तव में लगभग एक ही चीज़ करता हूं, लेकिन आप के बजाय $(init) क्यों कॉल कर रहे हैं?

+0

क्योंकि मैं jQuery का उपयोग कर रहा हूं, और इसे डीओएम तैयार करने के लिए निकालना चाहता हूं। – alex

+0

आह। मैं चीजों को थोड़ा अलग तरीके से करने के लिए प्रयोग किया जाता हूं और माना जाता है कि आप एक ही $ $ (फ़ंक्शन() {}) 'कॉल के भीतर एकाधिक ब्लॉक लपेटेंगे। मुझ पर शर्म की बात है। जारी रहना। :) – simshaun

1

कोई यूयूआई वास्तव में इसे मॉड्यूल पैटर्न कहता है और इसे अपने कोड के बहुत से उपयोग करता है।

आप अज्ञात फ़ंक्शन के भीतर भी निम्न कार्य कर सकते हैं।

name = new init(); 
0

आईआईएफई (तुरंत आमंत्रित फ़ंक्शन अभिव्यक्ति) के रूप में लिखी एक jQuery प्लगइन की तरह दिखता है। आपको वास्तव में var name = (अतिरिक्त वैश्विक चर) की आवश्यकता नहीं है और jQuery ऑब्जेक्ट में गुजरना $.noConflict() के मामले में सबसे अच्छा अभ्यास है। इस और अन्य रोचक जानकारी के लिए बेन आलमैन की jquery-plugin-authoring बात करें।

(function($) { 

    var init = function() { 
     // Init something 
     $('a').click(show); 
    }; 

    var show = function() { 
     // Show something 
    }; 

    $(init); 

})(jQuery); 
संबंधित मुद्दे