कारण आप कॉफीस्क्रिप्ट फ़ंक्शन को सीधे कॉल नहीं कर सकते हैं, यह है कि संकलित होने पर कॉफीस्क्रिप्ट तुरंत-लागू फ़ंक्शन में लपेटा जाता है। यह आपके कोड को वैश्विक नेमस्पेस प्रदूषित करने से रोकने के लिए किया जाता है।
यह आम तौर पर एक अच्छा विचार ™ है, लेकिन निश्चित रूप से आप इसे प्राप्त करने के दौरान इसके आसपास हो सकते हैं। आप एक समारोह या अन्य चर सुलभ होना चाहते हैं हर जगह (यानी वैश्विक क्षेत्र), तो आप बस कह सकते हैं
window.myName = -> "Bob"
इस तरह, समारोह वैश्विक विस्तार के लिए सीधे जोड़ा जाता है, और आप से यह कॉल कर सकते हैं कहीं भी window.myName()
(या बस myName()
के रूप में जब तक कि फ़ंक्शन को स्थानीय द्वारा छायांकित नहीं किया जाता)।
हालांकि, ग्लोबल नेम स्पेस के रूप में के रूप में स्वच्छ रखने के लिए संभव है, यह अपने आप के लिए एक नाम स्थान को परिभाषित करने (जैसे jQuery करता है, $
वस्तु में सब कुछ रख कर) सबसे अच्छा है। उदाहरण के लिए, अपने पहले CoffeeScript या JavaScript फ़ाइल (यानी पहली फ़ाइल लोड करने के लिए) में, तो आप इस
window.myNamespace = {};
की तरह कुछ तो कुछ कर सकते हैं, जब भी आप चाहते हैं कहीं और उपलब्ध होने के लिए आपको ऐसा लगता है कि करने के लिए जोड़ सकते हैं नाम स्थान:
window.myNamespace.myName = -> "Bob"
और फिर आप, कहीं से भी कॉल कर सकते हैं window.myNamespace.myName()
या बस myNamespace.myName()
का उपयोग कर।
वैकल्पिक रूप से, आप CoffeeScript के अपने सभी फ़ाइलों के शीर्ष पर "निर्दिष्ट करता है, तो अपरिभाषित या नल" ऑपरेटर का उपयोग कर सकते हैं:
window.myNamespace ?= {} # create myNamespace if it doesn't already exist
जो भी फ़ाइल पहले से मूल्यांकन हो जाता है गायब window.myNamespace
वस्तु का निर्माण करेगा। बाद का कोड केवल यह देखेगा कि यह पहले से मौजूद है और असाइनमेंट छोड़ें। प्वाइंट है, मूल्यांकन आदेश के बावजूद यह हमेशा उपलब्ध रहेगा।
संपादित करें: myNamespace
कम-कैमलकेस क्योंकि यह मूल रूप से एक चर है; नहीं एक निर्माता/वर्ग
परिशिष्ट: आप -b/--bare
कमांड लाइन स्विच का उपयोग करके समारोह आवरण से बच सकते हैं, लेकिन के रूप में उल्लेख आवरण एक अच्छी बात है।
आपको वास्तव में फ्लैम्बिनो के उत्तर को स्वीकार करना चाहिए। यह बहुत अच्छा है! –