2010-12-04 21 views
28

जावास्क्रिप्ट में बनाम 'इस' 'var' को देखते हुए इस तीन निर्माता कार्य:बनाम निर्माता-पैरामीटर चर

function Foo(data) { 

    var _data = data; 

} 

function Bar(data) { 

    this.data = data; 

} 

function Baz(data) { 

    //just use data freely. 

} 

वहाँ कोई अंतर निर्माण के बाद data सदस्य की दृश्यता से अलग है?

उत्तर

25

var _data = data; स्थानीय प्रतिलिपि बनाता है data की (संदर्भ नहीं) (जैसे आप नए Bar().datanew Foo().data नहीं लेकिन क्या कर सकते हैं)। this.data = data वास्तव में वस्तु की एक संपत्ति बनाता है। http://javascriptweblog.wordpress.com/2010/08/30/understanding-javascripts-this/

+2

नोट: स्थानीय चर को पैरामीटर का मान सौंपा गया है। यदि पैरामीटर किसी ऑब्जेक्ट का संदर्भ है, तो स्थानीय चर उसी ऑब्जेक्ट का संदर्भ भी होगा, ऑब्जेक्ट की प्रतिलिपि के संदर्भ में नहीं। – Guffa

+1

यह एक अच्छा जवाब है (पन इरादा) – Marty

27

हाँ, अंतर कैसे चर संग्रहीत किया जाता है में है:

मैं इस (कोई यमक इरादा) पढ़ने की सलाह।

var के साथ घोषित वैरिएबल कन्स्ट्रक्टर फ़ंक्शन के लिए स्थानीय है। यदि दायरे में घोषित कोई फ़ंक्शन घोषित किया गया है, तो यह केवल कन्स्ट्रक्टर कॉल से परे जीवित रहेगा, क्योंकि इसे फ़ंक्शंस क्लोजर में कैप्चर किया जाता है।

this. के साथ घोषित वैरिएबल वास्तव में एक चर नहीं है, लेकिन वस्तु की एक संपत्ति है, और जब तक ऑब्जेक्ट करता है, तब तक यह जीवित रहेगा, भले ही इसका उपयोग किया जाए या नहीं।

संपादित करें:
यदि आप उन्हें घोषित किए बिना चर का उपयोग कर रहे हैं, तो उन्हें पूरी तरह से वैश्विक दायरे में घोषित किया जाएगा, न कि वस्तु का हिस्सा। आम तौर पर आपको जो भी घोषित किया जाता है, उसके लिए आपको उस दायरे को सीमित करने का प्रयास करना चाहिए, ताकि वैश्विक दायरे में सब कुछ खत्म न हो।

+1

यदि कोई चर कभी भी उपयोग नहीं किया जाता है ... क्या इससे कोई फर्क पड़ता है कि यह मौजूद है या नहीं? –

+0

परिवर्तक कन्स्ट्रक्टर कॉल से बच जाएगा भले ही इसका उपयोग किसी भी विधि द्वारा नहीं किया जाता है (जब तक कम से कम एक विधि मौजूद हो)। विधियों को चर का उपयोग करने की आवश्यकता नहीं है - यह जीवित है क्योंकि यह विधि (ओं) के दायरे में फंस गया है। –

+0

@ पाब्लो: बहुत ज्यादा नहीं, लेकिन यह चर घोषित करने के तरीकों के बीच अंतर का एक प्रभाव है। – Guffa

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