2012-07-26 9 views
5

से संबंधित क्रॉकफ़ोर्ड का कोड नीचे दिया गया कोड डगलस क्रॉकफ़ोर्ड की शानदार पुस्तक जावास्क्रिप्ट: द गुड पार्ट्स, पेज 2 9-30 से कुछ कोड के लगभग समान है। फर्क सिर्फ इतना है कि वह ऐसा तरह get_status संपत्ति कहते है:कन्स्ट्रक्टर आमंत्रण पैटर्न

Quo.prototype.get_status=function() { 
    this.status=string; 
} 

मेरा प्रश्न क्यों अपने कोड ठीक चलता है, लेकिन है मेरी छोटी परिवर्तन, नीचे, एक त्रुटि का कहना है कि myQuo कोई get_status विधि है में परिणाम?

<script> 
    var Quo=function(string) { 
    this.status=string; 
    } 
    Quo.get_status=function() { 
    return this.status; 
    } 
    var myQuo=new Quo("confused"); 
    alert(myQuo.get_status()); 
</script> 

उत्तर

8

आप, Quo समारोह वस्तु के लिए विधि जोड़ रहे हैं अपने प्रोटोटाइप के लिए नहीं है, तो यह new Quo() के साथ बनाया उदाहरणों द्वारा विरासत में मिला नहीं किया जाएगा। इस तरह से जोड़ा गया एक कार्य क्लासिक ओओपी भाषाओं में एक स्थिर विधि की तरह है - इसे Quo.get_status() के साथ बुलाया जा सकता है, लेकिन यह उदाहरणों से विरासत में नहीं मिलेगा और thisQuo फ़ंक्शन स्वयं को संदर्भित करेगा।

Quo.status = "foo"; 
Quo.get_status(); // "foo" 
+1

प्रश्न है _why_ get_status myQuo में नहीं जोड़ा गया है। मुझे पहले से ही पता है कि मैंने इसे क्यूओ में जोड़ा है, न कि इसके प्रोटोटाइप के लिए। –

+5

उदाहरण उनके रचनाकारों के गुणों या विधियों का उत्तराधिकारी नहीं हैं - प्रोटोटाइप से जुड़ी संपत्तियों और विधियों को विरासत में मिला है। – nrabinowitz

0

कार्य जावास्क्रिप्ट में ऑब्जेक्ट्स हैं। जब आप फ़ंक्शंस में गुण जोड़ते हैं तो वे उस फ़ंक्शन के उदाहरणों से विरासत में नहीं होते हैं। हालांकि जब आप फ़ंक्शन के प्रोटोटाइप में गुण जोड़ते हैं तो वे विरासत में होते हैं। यह समझने के लिए कि जावास्क्रिप्ट में प्रोटोटाइप-आधारित विरासत कैसे काम करती है following answer पढ़ें।

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