2012-02-01 14 views
10

उचित ओओ प्रोग्रामिंग करने के लिए स्थापित नोड के मॉड्यूल/आवश्यकता()/निर्यात के सर्वोत्तम उपयोग करने के लिए थोड़ा सा संघर्ष करना। क्या वैश्विक नामस्थान बनाने और निर्यात का उपयोग नहीं करना अच्छा है (क्लाइंट साइड जेएस ऐप विकास में)? तो, मॉड्यूल में (Namespace.Constructor.js):Node.js नेमस्पेसिंग

Namespace = Namespace || {}; 
Namespace.Constructor = function() { 
    //initialise 
} 
Namespace.Constructor.prototype.publicMethod = function() { 
    // blah blah 
} 

... और फ़ाइल बुला बस का उपयोग में ...

requires('Namespace.Constructor'); 
var object = new Namespace.Constructor(); 
object.publicMethod(); 

धन्यवाद

+3

उपयोग

अपने उदाहरण में, निम्न का उपयोग करें। आपका मॉड्यूल पहले से ही नामित है। बस [इन दस्तावेज़ों] का पालन करें (http://nodejs.org/docs/latest/api/modules.html)। – nicerobot

उत्तर

16

Node.js में, मॉड्यूल स्थान नामस्थान है, इसलिए आपके द्वारा वर्णित कोड में नामस्थान की आवश्यकता नहीं है। मुझे लगता है कि इसके साथ कुछ मुद्दे हैं, लेकिन वे प्रबंधनीय हैं। नोड केवल मॉड्यूल.एक्सपोर्ट ऑब्जेक्ट से जुड़े कोड और डेटा का पर्दाफाश करेगा।

var Constructor = function() { 
    // initialize 
} 
Constructor.prototype.publicMethod = function() {} 
module.exports = Constructor; 

और फिर, अपने कॉलिंग कोड में: `exports` या` module.exports`

var Constructor = require('./path/to/constructor.js'); 
var object = new Constructor(); 
object.publicMethod(); 
+1

लेकिन यदि हम var का उपयोग नहीं करते हैं, तो वैश्विक बनाया गया है और कॉलर के लिए उपलब्ध है। फिर हमें निर्यात का उपयोग करने की ज़रूरत क्यों है? – hacklikecrack

+1

वैश्विक अंतरिक्ष में नामों की टक्कर से बचने के लिए। बेशक आप अपना खुद का नेमस्पेस सिस्टम बना सकते हैं, लेकिन आवश्यकता है() उचित रूप से अच्छी तरह से काम करता है और node.js विकास में स्पष्ट मानक है। –

+7

हैकप्लेक्रैक: मॉड्यूल में एक var गुम करने से कॉलर से उपलब्ध वैश्विक नहीं बनता है। नोड स्वचालित रूप से उस कार्य को रोकने के लिए आपके मॉड्यूल कोड को फ़ंक्शन में लपेटता है। –