2010-11-03 14 views
6

jQuery प्लगइन्स एक प्लगइन के निजी कार्यों को छिपाने के लिए इस तरह एक पैटर्न का उपयोग a_private_function ओवरराइड करना पसंद है। क्या वास्तविक प्लगइन कोड को पैच किए बिना मैं इसे एक्सेस कर सकता हूं?पहुँच निजी सदस्यों

मैं शायद सोचा था कि मैं फोन करने वाले का उपयोग करके निजी समारोह के निष्पादन के संदर्भ का उपयोग लेकिन बात नहीं बनी सकता है: एक jQuery के निजी सदस्यों तक पहुँचने के लिए एक ही रास्ता

some_callback = function() { 
    console.log(some_callback.caller.a_private_function); // -> undefined 
}; 

jQuery('selector').name_of_plugin({ onStart: some_callback }); 

उत्तर

5

जैसा कि मैंने this answer में सीखा है, प्लगइन प्लगइन स्रोत को संशोधित करने के लिए हैं।

5

आपके पास closured फ़ंक्शन का शास्त्रीय उदाहरण है।

a_private_function एक ऐसा फ़ंक्शन है जो केवल "बाहरी" अज्ञात फ़ंक्शन से दायरे में दिखाई देता है। बंद होने के कारण, name_of_plugin को असाइन किए गए अनाम फ़ंक्शन को बाहरी context और इसलिए a_private_function तक पहुंच है।

यह एक अच्छी बात है क्योंकि आप कुछ कार्यों और चर को सुरक्षित और छुपा सकते हैं।

लघु कहानी, बाहर से बंद किए गए चर का उपयोग करने के लिए पूर्ण रूप से शून्य मौका है।

1

JQUERY UI विजेट फ़ैक्टरी का उपयोग करते समय, फ़ंक्शंस (जो _ के साथ prefixed हैं) निजी नहीं हैं, बल्कि इसके बजाय (अनुरूपित) संरक्षित (प्रोटोटाइप) फ़ंक्शंस हैं।

इसका मतलब है कि जब तक आप मौजूदा प्रोटोटाइप का विस्तार नहीं करते हैं तब तक आप उन्हें एक्सेस कर सकते हैं। उदाहरण के लिए: - अन्य उत्तर सुझाव है और इसलिए के रूप में आप बाहर से इन तक नहीं पहुँच सकता

$.extend($.ui.accordion.prototype, { 
    open: function(index) { 
     //now you can access any protected function 
     var toOpen = self._findActive(index); 
     toOpen.next().show(); 
    }, 
    _completed: function (cancel) { 
     //You can even overwrite an existing function 

    } 
}); 

समारोह आप अपने पहले उदाहरण में बताया गया है हालांकि, निजी, है।

हालांकि, यदि आप JQuery UI विजेट के अंदर संरक्षित चर का उपयोग करना चाहते हैं तो यह संभव है (ऊपर के रूप में)।

सोचा यह उपयोगी हो सकता है।

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