2012-12-05 25 views
8
var p = function() { 
    this.show = function() { 
     alert('hello world!!!'); 
    } 
} 

p.prototype.show = function() { 
    alert('haha'); 
} 

var o = new p(); 
o.show(); 

यह "hello world!!!" अलर्ट करता है, क्यों?प्रोटोटाइप में फ़ंक्शन घोषित क्यों नहीं किया जाता है?

क्या मैं प्रोटोटाइप विधि संशोधित कर सकता हूं, यदि हां कैसे?

+1

एक बहुत अच्छी व्याख्या: http://stackoverflow.com/questions/310870/use-of-prototype-vs-this-in-javascript –

+1

FYI: यदि आपको आवश्यकता हो तो आप प्रोटोटाइप विधि को कॉल कर सकते हैं: 'p। prototype.show.call (ओ) ' – Prinzhorn

उत्तर

7

ऐसा इसलिए है क्योंकि आप जिस विशिष्ट कार्य को कन्स्ट्रक्टर में परिभाषित करते हैं वह प्रोटोटाइप के माध्यम से विरासत में मिलता है।

EcmaScript specification से:

हर वस्तु एक निर्माता द्वारा बनाई गई अपनी निर्माता के "प्रोटोटाइप" संपत्ति के मूल्य का एक अंतर्निहित संदर्भ (वस्तु के प्रोटोटाइप कहा जाता है) है। इसके अलावा, एक प्रोटोटाइप में गैर-शून्य इसके प्रोटोटाइप के निहित संदर्भ हो सकता है, और इसी तरह; इसे प्रोटोटाइप श्रृंखला कहा जाता है। जब किसी ऑब्जेक्ट में किसी प्रॉपर्टी में कोई संदर्भ दिया जाता है, कि संदर्भ उस नाम की संपत्ति में उस ऑब्जेक्ट की उस प्रोटोटाइप श्रृंखला में है जिसमें उस नाम की संपत्ति है। अन्य शब्दों में, पहले उल्लिखित ऑब्जेक्ट की जांच संपत्ति के लिए की जाती है; यदि उस ऑब्जेक्ट में नामित संपत्ति है, तो यह संपत्ति है जिसमें संदर्भ संदर्भित करता है; यदि वह ऑब्जेक्ट नामित संपत्ति नहीं है, तो उस ऑब्जेक्ट के प्रोटोटाइप की जांच अगली है; और इसी तरह।

संक्षेप में: जब कोई फ़ंक्शन (या उसके नाम से कोई भी संपत्ति) ढूंढते हैं, तो आप ऑब्जेक्ट से प्रारंभ करते हैं और फिर प्रोटोटाइप श्रृंखला में जाते हैं।

+1

महान उत्तर =) –

3

p फ़ंक्शन में आप prototype.show विधि को ओवरराइड करते हैं।

1

जावास्क्रिप्ट में जब कोई संपत्ति हल हो जाती है तो इंजन पहले किसी ऑब्जेक्ट के गुणों को देखता है। आपके उदाहरण में ऑब्जेक्ट का प्रतिनिधित्व this द्वारा किया जाएगा। यदि यह संपत्ति पाता है, तो इस मामले में show (याद रखें कार्य गुण हो सकते हैं) यह उस संपत्ति का उपयोग करता है। अगर संपत्ति नहीं मिलती है तो संपत्ति को हल करने के प्रयास में प्रोटोटाइप श्रृंखला को फिर से चलाता है।

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