2010-05-30 19 views
5

जावास्क्रिप्ट फ़ंक्शन के बॉडी में रिटर्न स्टेटमेंट का प्रभाव क्या होता है जब इसे किसी नए ऑब्जेक्ट ('नया' कीवर्ड 'के साथ कन्स्ट्रक्टर के रूप में उपयोग किया जाता है?जेएस कन्स्ट्रक्टर्स में रिटर्न स्टेटमेंट

+0

देखें: http://stackoverflow.com/questions/1978049/what-values-can-a-constructor-return-to-avoid-returning-this/ – CMS

उत्तर

17

आमतौर पर return बस निर्माता से बाहर निकलता है। हालांकि, यदि लौटाया गया मान एक ऑब्जेक्ट है, तो इसका उपयोग new अभिव्यक्ति के मान के रूप में किया जाता है।

पर विचार करें:

function f() { 
    this.x = 1; 
    return; 
} 
alert((new f()).x); 

प्रदर्शित करता है 1, लेकिन

function f() { 
    this.x = 1; 
    return { x: 2}; 
} 
alert((new f()).x); 

प्रदर्शित करता है 2.

+1

+1, रद्द निरस्त किया गया। – Matchu

+0

धन्यवाद, यह वही है जो मैं जानना चाहता था। – Tony

1

कारण new ऑपरेटर का उपयोग करने के लिए है यह सुनिश्चित करें कि this निर्माता के अंदर एक को संदर्भित करता है नया संदर्भ, जो समर्थन करता है:

this.functionName = function(){...}; 

, और instanceof ऑपरेटर के उपयोग की अनुमति के लिए:

function foo() {...} 
var bar = new foo(); 
alert(bar instanceof foo); 

इस तरह के एक निर्माता के अंदर return {...} का उपयोग करते हुए इन प्रभावों के दोनों को नकारता रूप this इस तरह के एक पैटर्न के साथ की जरूरत नहीं किया जाएगा, और instanceof के रूप में होगा वापसी false

+0

आपकी प्रतिक्रिया के लिए धन्यवाद, मुझे लगता है कि यह जेएस रचनाकारों की कमी का खुलासा करता है। – Tony

+0

या भाषा में लचीलापन दिखाता है :) –

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