थोड़ी दूरदर्शिता के साथ आप औरeval
का उपयोग करके स्वयं को सुरक्षित रख सकते हैं। वर्गों है कि आप नाम से दृष्टांत करना चाहते हैं की एक सूची कहीं रखें:
class Dog
bark:->
"Woof"
# Or window.named_classes if you need to access
# `named_classes` globally (or just in another
# CoffeeScript file).
named_classes = { Dog: Dog }
और फिर अपने देखने के बजाय टेबल eval
का उपयोग करें:
name = 'Dog'
dog = new named_classes[name]
जब आप कहते हैं कि class Dog
, आप एक स्थानीय के साथ खत्म चर Dog
कहा जाता है:
var Dog;
Dog = (function() { /* ... */ })();
और वहाँ एक स्थानीय JavaScript वैरिएबल पर प्राप्त करने के लिए जब तक आप इसे somewher की दुकान कोई रास्ता नहीं है ई कि आप नाम से उपयोग कर सकते हैं। यह भी ध्यान रखें कि eval
अगर आप एक CoffeeScript फ़ाइल में Dog
को परिभाषित करने और इसे एक और उपयोग करना चाहते काम नहीं करेगा, CoffeeScript wraps each file in self-executing anonymous function to limit variable scope:
सभी CoffeeScript उत्पादन एक गुमनाम समारोह में लपेटा जाता है: (function(){ ... })()
; यह सुरक्षा रैपर, var
कीवर्ड की स्वचालित पीढ़ी के साथ संयुक्त, दुर्घटना से वैश्विक नामस्थान को प्रदूषित करना बहुत कठिन बना देता है।
आप अन्य लिपियों का उपयोग करने के लिए, शीर्ष स्तर के चर बनाने खिड़की पर गुण के रूप में उन्हें देते हैं, या CommonJS में निर्यात वस्तु पर करना चाहते हैं तो।
स्रोत
2012-01-18 19:18:19
उसमें जोड़ने के लिए, तथ्य के बाद उन्हें इकट्ठा करने के बजाय, आपको उन्हें शुरू करने के लिए नामस्थान के लिए अधिक सुविधाजनक लग सकता है। कहीं से पहले सब कुछ: 'myClasses = {}' बाद में: 'वर्ग myClasses.Dog' अंत:' कुत्ते = नए myClasses [ "डॉग"] ' –
@Chris: हाँ, यह एक अच्छी बात है। आप 'क्लास विंडो। डॉग' या 'क्लास विंडो' नाम_क्लास.डॉग 'का उपयोग कर सकते हैं लेकिन 'window.Dog' को' विंडो 'और' window.name_classes.Dog' प्रदूषित करने का जोखिम 'कुत्ते' को थोड़ा बोझिल बनाता है। आप 'name_classes.Dog = class Dog भी कर सकते हैं ... 'लेकिन वह है, आईएमओ, थोड़ा बदसूरत। –
@ क्रिस: ऐसा लगता है कि हम एक ही समय में टिप्पणियां संपादित कर रहे हैं (और मेरा इंटरनेट कनेक्शन डोडी है!)। वैसे भी, वांछित प्रभाव प्राप्त करने के कई तरीके हैं, महत्वपूर्ण बात यह है कि कक्षा में किसी ऑब्जेक्ट में संदर्भ को संग्रहीत करना ताकि उसके पास प्रोग्राम-सुलभ नाम हो। –