2011-02-09 8 views
16

जावास्क्रिप्ट प्रोटोटाइप विरासत में, प्रोटोटाइप.कॉन्स्ट्रक्टर संपत्ति जोड़ने का लक्ष्य क्या है। मुझे एक उदाहरण के साथ समझाओ।"प्रोटोटाइप" में "कन्स्ट्रक्टर" संपत्ति को सेट करने के लाभ

 
var Super = function() { 
    this.superProperty = 'Super Property' 
} 
var Sub = function() { 
    this.subProperty = 'Sub Property' 
} 

Sub.prototype = new Super(); 
Sub.prototype.constructor = Sub; // advantages of the statement 

var inst = new Sub(); 

Sub.prototype.constructor = उप या नहीं जोड़ते समय निम्न पंक्तियां सभी मामलों में हमेशा सत्य होती हैं।

 
console.log(inst instanceof Sub) // true 
console.log(inst instanceof Super) // true 

मुझे लगता है, नए उदाहरण मिलने पर यह उपयोगी हो सकता है लेकिन कब और/या कैसे?

अग्रिम धन्यवाद।

+2

महान प्रश्न! – tybro0103

उत्तर

10

ऑब्जेक्ट बनाने के लिए उपयोग किए गए फ़ंक्शन को सटीक रूप से प्रतिबिंबित करने के लिए constructor संपत्ति ठीक से रीसेट करने के लिए है।

Sub.prototype = new Super(); 

console.log(new Sub().constructor == Sub); 
// -> 'false' 

Sub.prototype.constructor = Sub; 
console.log(new Sub().constructor == Sub); 
// -> 'true' 
+2

इसे स्थापित करने का नतीजा क्या है? या दूसरे शब्दों में, Sub.prototype.constructor का मान वास्तव में कभी मायने रखता है? यह सब कुछ उपहास के उदाहरणों के निर्माण को प्रभावित नहीं करता है। यह उन चीजों में से एक होना चाहिए जो "इतनी स्पष्ट" हैं कि कोई भी वास्तव में इसे बिल्कुल सही नहीं बताता है, और इस प्रकार यह मुझे दूर कर देता है :-) – Yetanotherjosh

+6

@ येटानोथोजोश: ठीक है, ओपी के कोड के मामले में, यदि वह उस रेखा को छोड़ देता है, फिर 'inst.constructor === सुपर', भले ही इसे 'नया उप()' के साथ तुरंत चालू किया गया हो। यदि आप उस संपत्ति की परवाह नहीं करते हैं तो यह आम तौर पर कोई समस्या नहीं होगी, लेकिन यदि आप अन्य कोड के साथ उदाहरण साझा कर रहे थे तो आप कुछ मामलों में भ्रम पैदा कर सकते हैं, जिसमें 'नया inst.constructor()' वास्तव में परिणाम देगा 'सुपर()' और 'उप()' के उदाहरण में (इसलिए यह 'Sub.prototype' के लिए विशेष गुण अनुपलब्ध होगा)। ** टीएल; डॉ यह एक अच्छा प्रोग्रामिंग अभ्यास ** है। –

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