2011-08-05 14 views
5

अगर मैं एक Node.js मॉड्यूल "augs" किक्या मैं नोड में "स्थैतिक विधियों" के साथ ऑब्जेक्ट, फ़ंक्शन, दिनांक इत्यादि बढ़ा सकता हूं?

Object.foo = "bar"; 

शामिल तब मैं वापस 'undefined' मिल आरईपीएल

require("./augs"); 
typeof Object.foo 

में टाइप पैदा करते हैं।

हम एक महत्वपूर्ण है कि Object को अतिरिक्त सुविधा के तरीकों, Function, Date, आदि हम दृश्यपटल और बैकएंड के बीच कुछ कोड साझा करने के लिए कोशिश कर रहे हैं पर निर्भर करता है हमारी वेब अनुप्रयोग में कोड की राशि है, लेकिन यह नोड की तरह लगता है इन कन्स्ट्रक्टर फ़ंक्शंस को रीसेट करता है, या किसी अन्य तरीके से किसी अन्य मॉड्यूल में अन्य मॉड्यूल में लीक करने से उन्हें अन्यथा परिवर्तनों को रोकता है। हालांकि यह बहुत स्मार्ट है और मैं सुरक्षा के स्तर की सराहना करता हूं, क्या कहने का कोई तरीका है "मुझे पता है कि मैं क्या कर रहा हूं; कृपया मुझे Object बढ़ाएं"?

exports.augment = function(o) { 
    o.foo = "bar"; 
} 

बढ़ाने इस तरह Object:

उत्तर

4

augs.js मान लिया जाये कि निम्नलिखित शामिल

> var aug = require("./augs.js"); 
> aug.augment(Object); 
> typeof Object.foo 
'string' 

नोट: मान लें तो आप निम्नलिखित भी समारोह निर्यात:

exports.getObject = function() { 
    return Object; 
} 

तब:

> var aug = require("./augs.js") 
> aug.getObject() == Object 
false 
+0

हाँ, मुझे लगता है कि यह काम करेगा; मुझे एक निर्यात मॉड्यूल में हमारे (बल्कि बड़े) 'augs.js' को रूपांतरित करना होगा, हालांकि, किस तरह का बेकार है। यह भी इंगित करने के लिए धन्यवाद कि एक मॉड्यूल से 'ऑब्जेक्ट' किसी अन्य मॉड्यूल से '==' ऑब्जेक्ट 'नहीं है। – Domenic

+0

@lwburk क्या आप ऑब्जेक्ट पर अलग-अलग मॉड्यूल में अलग-अलग हो सकते हैं? –

+0

@ पीटर - बस शब्दों में कहें, मॉड्यूल में मूल निवासी समान मॉड्यूल नहीं हैं जो उस मॉड्यूल को लोड करने वाली स्क्रिप्ट में हैं। इसके अलावा: "वर्तमान में मॉड्यूल 1.1 के रूप में मॉड्यूल मॉड्यूल में मूल वर्गों को लागू करने का विकल्प चुनने के लिए" अनिर्धारित "है। इसका मतलब है कि यह प्रत्येक पर्यावरण कार्यान्वयन पर निर्भर करता है कि यह कैसे कार्य करना चाहिए।" http://wiki.commonjs.org/wiki/Modules/Natives –