2012-09-12 5 views
5

निम्नलिखित स्निपेट पर विचार करें। (देखें here।)कन्स्ट्रक्टर निर्माण कार्य क्यों नहीं है?</p> <pre><code>​f = function() {}; f.prototype = {}; thing = new f; </code></pre> <p>मैं देखना है कि <code>thing.constructor​</code><code>Object()</code> है हैरान था:

thing.constructor फ़ंक्शन f क्यों नहीं है?

उत्तर

9

क्योंकि आपने सादे ऑब्जेक्ट के साथ f की मूल prototype ऑब्जेक्ट को पूरी तरह से बदल दिया है। यह prototype ऑब्जेक्ट था जिसने f को .constructor संपत्ति के माध्यम से संदर्भित किया था।

ऑब्जेक्ट शाब्दिक वाक्यविन्यास का उपयोग करके बनाए गए ऑब्जेक्ट का निर्माता Object कन्स्ट्रक्टर होगा।

इसे वापस पाने के लिए, आपको इसे मैन्युअल रूप से वहां रखना होगा।

f = function() {}; 
f.prototype = {}; 
f.prototype.constructor = f; 
thing = new f; 

इस नए प्रोटोटाइप वस्तु के प्रोटोटाइप श्रृंखला में पर .constructor संपत्ति शैडो होगा।

यदि आप उस संपत्ति को हटाते हैं, तो आपको Object फिर से मिल जाएगा।

delete f.prototype.constructor; 

console.log(thing.constructor); // Object 
संबंधित मुद्दे