2010-07-16 18 views
9

आजकल, मैं कई कार्यों के साथ एक .js फ़ाइल बनाता हूं और फिर मैं इसे अपने HTML पृष्ठों से लिंक करता हूं। यह काम कर रहा है लेकिन मैं जानना चाहता हूं कि मेरे पृष्ठों में जेएस डालने और दायरे से टकराव से बचने के लिए सबसे अच्छा तरीका क्या है (धन्यवाद।जावास्क्रिप्ट: वैश्विक दायरा

+1

http: //javascript.crockford.com/code.html – Anders

उत्तर

1

शायद यह सबसे अच्छा तरीका नहीं है, लेकिन बहुत से PHP सिस्टम (मैं आपको देख रहा हूं, ड्रूपल) अपनी विशेष प्लगइन का नाम लेता हूं और इसे अपने सभी फ़ंक्शन नामों में प्रस्तुत करता हूं। आप कुछ ऐसा कर सकते हैं, जो आपके फ़ंक्शन नामों पर आपकी क्षमता का नाम जोड़ सकता है - "mything_do_action()"

वैकल्पिक रूप से, आप अधिक "ओओ" दृष्टिकोण ले सकते हैं, और एक ऐसी वस्तु बना सकते हैं जो आपकी क्षमता को समाहित करे, और सभी को जोड़ें आईटी पर सदस्य कार्यों के रूप में आपके कार्य। इस तरह, चिंता करने के लिए वैश्विक दायरे में केवल एक चीज है।

+0

मैं जावास्क्रिप्ट के साथ ओओ सीखने की कोशिश कर रहा हूं लेकिन यह मेरे लिए मुश्किल है। जावास्क्रिप्ट में एक साधारण "कक्षा" या कुछ और बनाने के लिए बहुत सारे वाक्यविन्यास हैं :) धन्यवाद। – thomas

6

एक नया दायरा बनाने और वहां अपना कोड निष्पादित करने का सबसे अच्छा तरीका है।

(function(){ 
    //code here 
})(); 

यह सबसे अच्छा उपयोग किया जाता है जब वैश्विक दायरे को कम से कम एक्सेस किया जाता है।

असल में, यह एक अज्ञात फ़ंक्शन को परिभाषित करता है, इसे एक नया दायरा देता है, और इसे कॉल करता है।

var NameSpace = { 
    Person : function(name, age) { 

    } 
}; 

var jim= new NameSpace.Person("Jim", 30); 
+0

"()" का क्या अर्थ है? इसके बारे में कोई लिंक? और window.onload के बारे में क्या? मुझे इसे कहां रखना चाहिए? जावास्क्रिप्ट में कुछ बूटस्ट्रैप जैसी अभ्यास है? धन्यवाद। – thomas

+0

व्यक्तिगत रूप से मुझे लगता है कि अगर आप इसे एक पंक्ति पर देखते हैं तो एक अज्ञात फ़ंक्शन को समझना आसान होता है। दुर्भाग्य से मुझे टिप्पणियों में कोई लाइन-ब्रेक नहीं मिला है, लेकिन यदि आप इस तरह से सोचते हैं: यह पहले से मौजूद फ़ंक्शन को निष्पादित करने जैसा है, लेकिन फ़ंक्शन के नाम का उपयोग करने के बजाय, आप फ़ंक्शन परिभाषा को ब्रैकेट में डालते हैं। – lucideer

+0

आप वास्तव में उदाहरण के लिए ऐसा कर सकते हैं: (फ़ंक्शन (पैरा) {/ * * /}) ('param value'); – lucideer

9

एक साधारण विचार एक उद्देश्य यह है कि अपने नाम स्थान का प्रतिनिधित्व करता है का उपयोग करने के लिए है आपके द्वारा कहीं और लिखा गया जावास्क्रिप्ट फ़ंक्शंस (अन्य स्क्रिप्ट में), आप एक वैश्विक ऑब्जेक्ट बनाने से बेहतर हैं जिस पर उन्हें एक्सेस किया जा सकता है। या तो की तरह:

var mySingleGlobalObject={}; 
mySingleGlobalObject.someVariable='a string value'; 
mySingleGlobalObject.someMethod=function(par1, par2){ /* */ }; 

या वैकल्पिक, छोटे वाक्य रचना (जो एक ही बात करता है):

var mySingleGlobalObject={ 
    someVariable:'a string value', 
    someMethod:function(par1, par2){ /* */ } 
};

यह तो जैसे अन्य लिपियों से बाद में पहुँचा जा सकता है:

mySingleGlobalObject.someMethod('jack', 'jill');
12

आप उनकी तरह एक गुमनाम समारोह में लपेट कर सकते हैं::

(function(){ /* */ })();

हालांकि, अगर आप फिर से उपयोग करने की आवश्यकता है

+0

मुझे लगता है कि हमेशा अपने कोड को (फ़ंक्शन() {/ * * /})() के साथ लपेटना सुरक्षित है; बस अगर आप एक स्क्रिप्ट शामिल करते हैं कि इसे बुरी तरह समाप्त कर दिया गया है। फिर, मुझे लगता है कि आप अन्य स्क्रिप्ट के साथ साझा करने के लिए, उदाहरण के लिए "दस्तावेज़" में अपना mySingleGlobalObject जोड़ सकते हैं। – endavid

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