2010-04-05 24 views
7

क्या यह निर्धारित करने के लिए कोई विचार है कि निजी सदस्यों के साथ ऑब्जेक्ट बनाने के लिए कौन सा बेहतर अभ्यास है?जावास्क्रिप्ट नई वस्तु (फ़ंक्शन) बनाम इनलाइन आमंत्रण

var object = new function() { 
    var private = "private variable"; 
    return { 
     method : function() { 
      ..dosomething with private; 
     } 
    } 
} 

वी.एस.

var object = function() { 
... 
}(); 

असल में यहां नई का उपयोग कर, और सिर्फ समारोह के तुरंत बाद हम इसे परिभाषित लागू के बीच क्या अंतर है?

+0

[कभी कभी नए समारोह (का उपयोग ') {...}'!] (Http://stackoverflow.com/a/10406585/1048572) माना जाता है कि, इस विशेष मामले में जहां आप फ़ंक्शन से 'वापसी' करते हैं, वह * वह * बुरा नहीं है। – Bergi

उत्तर

9

new ऑपरेटर Constructor Function जैसे फ़ंक्शन को लागू करने का कारण बनता है।

मैंने पहले उस पैटर्न को देखा है, लेकिन मुझे इसका उपयोग करने का कोई लाभ नहीं दिख रहा है।

new ऑपरेटर के प्रयोजन के लिए एक वस्तु (निर्माता के अंदर this मूल्य) सही [[Prototype]] आंतरिक संपत्ति की स्थापना बनाने के लिए,, प्रोटोटाइप श्रृंखला निर्माण और विरासत को लागू करने (आप [[Construct]] में विवरण देख सकते हैं है ऑपरेशन)।

मैं आपको इनलाइन आमंत्रण पैटर्न के साथ रहने के लिए अनुशंसा करता हूं।

+0

जबकि मैं सीएमएस से सहमत हूं क्योंकि आप एक खुलासा मॉड्यूल पैटर्न का उपयोग कर रहे हैं और लेक्सिकल स्कॉइंग पर निर्भर हैं - मैं स्पष्ट करता हूं कि प्रोटोटाइप पैटर्न पर बनाए गए वर्ग जैसी वस्तु बनाने के दौरान 'नया' उपयुक्त है - उदाहरण के लिए बैकबोनजेएस मॉडल या व्यू। – bjnsn

1

यदि आप ईवेंट हैंडलर के रूप में फ़ंक्शंस का उपयोग कर रहे हैं तो आप मेमोरी लीक प्राप्त कर सकते हैं। articles

1

यह link आंकड़े प्रदान करता है जो यह भी पुष्टि करता है कि इनलाइन आमंत्रण पैटर्न बेहतर है।

कृपया ध्यान दें कि माप operations per second में है जो उच्च बेहतर