Wednesday 15 August 2012

JavaScript: self-calling function returns a closure. What is it for? -


एक जावास्क्रिप्ट पुस्तकालय का अध्ययन मैं निम्नलिखित निर्माण पाया:

  theMethod: function () {var एम 1 = नया कुछ क्लास (); रिटर्न फ़ंक्शन (पीरामेटर) {this.someMethod (); m1.methodCall (this.someField1); This.someField2 = 'कुछ मान'; }} ()   

इस विधि को निम्नानुसार कहा जाता है:

  c.theMethod (paramValue);   

इस घोषणा से लेखक क्या कहना चाहते हैं?

क्यों नहीं इस घोषणा का उपयोग करें:

  theMethod: फ़ंक्शन TheParameter) {var एम 1 = नया कुछ क्लास (); this.someMethod (); m1.methodCall (this.someField1); This.someField2 = 'कुछ मान'; }    

यह के लिए है। एम 1 अन्य विधियों और स्थानों के बाहरी उपयोग से छिपा हुआ है जो कि विधि का उपयोग कर सकता है। जावास्क्रिप्ट प्रोग्रामर आमतौर पर इनकैप्सुलेशन के बारे में परवाह नहीं करते हैं (लेकिन उन्हें गैर तुच्छ लिपियों पर होना चाहिए) क्योंकि आपको क्लोज़र्स का उपयोग करना होगा जो कक्षाओं के डिज़ाइन की जटिलताएं बनाते हैं और खराब होने पर प्रदर्शन को कम कर सकते हैं। यही कारण है कि आप इस तरह की संरचना को अक्सर पुस्तकालयों के बाहर नहीं देखते हैं।

इसके अलावा आपके दूसरे कोड का टुकड़ा समकक्ष नहीं है। कुछ समतुल्य होगा:

  theMethod: फ़ंक्शन (theParameter) {यदि (this type.prototype .__ प्राइवेट_ === "अपरिभाषित") {this.prototype .__ प्राइवेट __ = {}} यदि (टाइपफ यह .__ प्राइवेट __। एम 1 === "अपरिभाषित") {this.prototype .__ निजी __। M1 = नया SomeClass (); } This.someMethod (); । इस निजी __ m1.methodCall (this.someField1) .__; This.someField2 = 'कुछ मान'; }   

लेकिन फिर एम 1 वास्तव में निजी नहीं है।

यह भी ध्यान रखें कि कोड एम 1 के उस टुकड़े में फ़ंक्शन के लिए केवल दिखाई देता है, अगर यह विधि सदस्य था एक वर्ग के उस वर्ग के अन्य तरीकों को एम 1 (जावा पर "निजी" कीवर्ड से अलग बनाकर) देखने में सक्षम नहीं होगा। इसके अलावा यह भी कि आप मेथोड 1 घोषित करने के आधार पर "स्थिर" के बराबर जावा होगा (एम 1 एक ऑब्जेक्ट के प्रोटोटाइप पर फ़ंक्शन है, यह स्थिर है, अगर यह प्रोटोटाइप पर नहीं है, तो यह स्थिर नहीं है)।

No comments:

Post a Comment