2013-02-03 23 views
5

क्या होता है यदि आप एक चर के लिए नई वस्तु असाइन नहीं करते हैं? उदाहरण के लिए:क्या होता है यदि नया इंस्टेंस ऑब्जेक्ट एक चर को असाइन नहीं किया गया है?

function MyConstructor() { 
    // Codes here 
}; 

new MyConstructor(); // new object instance is not assign to a variable 

क्या यह कोड खतरनाक है? क्या यह वैश्विक नेमस्पेस को पकड़ता है? क्या इस शैली के साथ बनाई गई वस्तु का उपयोग करना संभव है?

धन्यवाद।

+0

आप ऑब्जेक्ट क्यों बनायेंगे और इसका संदर्भ नहीं बनायेंगे? मुझे नहीं लगता कि बाद में इसे एक्सेस करना संभव है, जब तक कि आप इसे किसी फ़ंक्शन से वापस नहीं कर लेते। –

+0

क्या यह 'मायकोनस्ट्रक्टर' है या यह 'टेस्ट' है? – Bergi

+0

ओह क्षमा करें MyConstructor टेस्ट नहीं है .. उत्तर के लिए धन्यवाद दोस्तों .. :) – japt

उत्तर

8
  • क्या यह कोड खतरनाक है? - नहीं
  • क्या यह वैश्विक नामस्थान को पकड़ता है? - नहीं
  • क्या इस शैली के साथ बनाई गई वस्तु का उपयोग करना संभव है? - नहीं

आप सही तरीके से कहा गया है, कॉल new MyConstructor() एक नई वस्तु वापस आ जाएगी, यह करने के लिए संदर्भ बस नहीं संगृहीत हो जाएंगे और इसलिए बहुत जल्दी कचरा कलेक्टर द्वारा हटाया नहीं जाएगा। कि नई वस्तु पर कार्य करने के अपने ही मौका सीधे

new MyConstructor().someMethod(); 

है ... उसके बाद, आप अपने मौका खो दिया है और क्योंकि नई वस्तु संदर्भ बाहरी अंतरिक्ष :)

+0

दूसरे भाग के लिए +1। –

+3

'यह' निर्माता के अंदर और फिर कहीं और संग्रहीत किया जाएगा। –

+0

@LeeTaylor: बहुत सी चीजें काम करती हैं, लेकिन चूंकि ओपी ने कहीं भी कुछ पागल योगदानों का उल्लेख नहीं किया है, हम ऐसा क्यों मानेंगे? उत्तर के लिए – jAndy

1

में खो जाता है इसके निर्माण के बाद इसका कोई संदर्भ नहीं है, यह जल्द ही कचरा इकट्ठा किया जाता है।

बस एफवाईआई: वस्तुओं का 80 से 9 0% समय बनाने का कारण यह है कि उन्हें संदर्भित किया जा सकता है और बाद में उपयोग किया जा सकता है।

+2

'यह' निर्माता के अंदर और फिर कहीं और संग्रहीत काम करेगा। –

4

जब तक कि निर्माता स्वयं ऑब्जेक्ट के बाहर कहीं भी ऑब्जेक्ट का संदर्भ सहेजता नहीं है, तब तक ऑब्जेक्ट का कोई संदर्भ नहीं होता है, और कचरा कलेक्टर इसे हटा देगा।

कोड खतरनाक नहीं है, यह वैश्विक नामस्थान में कुछ भी नहीं जोड़ देगा, और जब तक निर्माता इसे संभव बनाता है तब तक ऑब्जेक्ट तक पहुंचना संभव नहीं है।

जहां यह हो सकता है अगर निर्माता वस्तु ही पंजीकृत करता है इस्तेमाल किया जा सकता का एक उदाहरण:

var myHandlers = {}; 

function Handler(name) { 
    myHandlers[name] = this; 
} 

new Handler("test"); 

ऐसा ही कुछ का उपयोग करने का दोष यह है कि यह पाठ्यक्रम का पालन करने के क्या हो रहा है कठिन है की है।

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