2016-09-16 13 views
8

मैं इस पैटर्न देख रहा हूँ NodeJS कार्यान्वयन, के लिए इन दिनों जहां हम अपना मॉड्यूल के लिए निम्न कोड है में:ES6 क्लास और module.exports

class Foo { 
    bar() { 
    console.log('bar'); 
    } 
} 
module.exports = Foo; 

फिर जब मैं एक की आवश्यकता होती है और अंत में बनाने के लिए नए कहते हैं कक्षा का एक उदाहरण।

var Foo = require(./foo); 
var myFoo = new Foo(); 
myFoo.bar(); 

मेरे अनुसार यह पैटर्न क्लास फू के कई उदाहरण बनाएगा, हर बार इसे कहा जाता है।

अन्य पैटर्न ऐसा हो सकता था जिसका उपयोग मेरे foo.js में किया जाएगा।

module.exports = { 
    bar: function() { 
    console.log('bar'); 
    } 
}; 

और फिर मैं सिर्फ आवश्यकता होती है और कॉल बार।

var foo = require(./foo); 
foo.bar(); 

प्रश्न ये दोनों एक ही व्यवहार करेंगे? क्या दूसरा पैटर्न ऑब्जेक्ट पर हर बार ऑब्जेक्ट्स बनाते रहेंगे और ऑब्जेक्ट पर बार कॉल करेगा?

सिंगलटन पैटर्न को 1 मामले में एक अच्छा विचार नहीं बना रहा है क्योंकि हम अन्य भाषाओं में उपयोग किए जाते हैं, जिसमें हम एक ही उदाहरण की सेवा करते रहेंगे यदि यह पहले से ही बनाया गया है?

+0

आप ES6 का उपयोग कर रहे हैं, इसलिए सुनिश्चित करें कि बहुत कम ब्राउज़र इस सुविधा का समर्थन करता है। –

+0

इरादा जेडएस में चलाने के लिए है और ब्राउजर में नहीं है। –

उत्तर

8

मेरे अनुसार यह पैटर्न क्लास फू के कई उदाहरण बनाएगा, हर बार इसे कहा जाता है।

हां, यही उद्देश्य है। हालांकि new Foo(); केवल आपके उदाहरण में एक बार निष्पादित किया जाता है।

क्या ये दोनों समान व्यवहार करेंगे?

सं

दूसरा पैटर्न वस्तुओं बनाने हर मैं की आवश्यकता होती है और वस्तु पर कॉल बार रखना होगा?

संख्या require() कॉल कैश किए जाते हैं, वे हर बार एक ही मॉड्यूल लौटाते हैं।

सिंगलटन पैटर्न को एक अच्छा विचार नहीं बना रहा है?

नहीं, यदि कोई राज्य शामिल है तो सिंगलटन शायद ही कभी एक अच्छा विचार है। आपका उदाहरण नहीं है, लेकिन class es का उपयोग नोड.जेएस में आमतौर पर किया जाता है।