2011-03-01 4 views
38

में एक जावास्क्रिप्ट नाम स्थान मान लीजिए कि मुझे लगता है कि जैसे एक नाम स्थान करते हैं:विभाजन एकाधिक फ़ाइलों

var myNamespace = { 
    foo: function() { 
    }, 
    bar: function() { 
    } 
}; 

foo और bar अलग से परिभाषित करने फाइलों में इस कोड को विभाजित करने के लिए सबसे अच्छा तरीका क्या है?

मैं समय लोड करने के बारे में चिंतित नहीं हूं - मैं इसे तैनाती से पहले एक फ़ाइल में वापस जोड़ दूंगा।

+4

एक उत्कृष्ट प्रश्न के लिए वोट दें! मुझे कुछ अच्छा लगा। –

+0

ने यह भी उल्लेख किया: http://stackoverflow.com/a/4130511/895245 –

उत्तर

42

प्रत्येक फ़ाइल के शुरू में:

if(myNameSpace === undefined) { 
    var myNameSpace = {}; 
} 

फ़ाइल 1:

myNamespace.foo = function()... 

फ़ाइल 2:

myNamespace.bar = function()... 
2

सरल इस तरह अलग फ़ाइलों में परिभाषित:

फ़ाइल 1:

var myNamspace = {}; 

फ़ाइल 2:

myNamespace.foo = function()... 

फ़ाइल 3:

myNamespace.boo = function()... 

बस आप यह सुनिश्चित कर लें फ़ाइलों को सही क्रम में लोड करें।

13
// File1: 
// top level namespace here: 
var myNamespace = myNamespace || {}; 

// File2: 
myNamespace.foo = function() { 
    // some code here... 
} 
1
(function (NS) { 
    NS.Uber = function Uber() { 
     this.super = new NS.Super(); // yes, it works! 
    }; // 
}(NS = NS || {})); 

// ------------- other file ----------------- 

(function (NS) { 
    NS.Super = function Super() { 
     this.uber = new NS.Uber(); // yes, it will also work! 
    }; // 
}(NS = NS || {})); 

// -------------- application code ------------ 

var uber = new NS.Uber(); 
console.log(uber.super); 

var super = new NS.Super(); 
console.log(super.uber); 
+0

एनएस = एनएस || {} का अर्थ है कि यह एनएस को तर्क के रूप में भेजता है, और यदि कोई भी नहीं है, तो यह एनएस में एक खाली वस्तु निर्दिष्ट करता है। – eavichay

+0

यह संदर्भ त्रुटि को ट्रिगर करता है: लाइन '} (NS = NS || {}) निष्पादित करने का प्रयास करते समय एनएस अनिर्धारित है; '[उदाहरण के लिए यह jsfiddle देखें] (http://jsfiddle.net/6cyrx3ad/) – Eregrith

8

प्रत्येक फ़ाइल में इस पैटर्न का पालन करें:

(function(nameSpace) { 
    nameSpace.foo = function() { ... }; 
})(window.nameSpace = window.nameSpace || {}); 

इस तरह लोड ऑर्डरिंग महत्वहीन है।