2011-08-30 17 views
7

मैं जावास्क्रिप्ट शास्त्रीय विरासत1 के साथ संघर्ष कर रहा हूं। जबकि, अंत डगलस Crockford में, जावास्क्रिप्ट में शास्त्रीय मॉडल का समर्थन करने के लिए अपनी पहली attemps को खारिज कर दिया, मैं इसे समझने के लिए दिलचस्प:जावास्क्रिप्ट परजीवी विरासत

I have been writing JavaScript for 8 years now, and I have never once found need to use an uber function. The super idea is fairly important in the classical pattern, but it appears to be unnecessary in the prototypal and functional patterns. I now see my early attempts to support the classical model in JavaScript as a mistake.

हालांकि, वहाँ कुछ क्या चिंताओं परजीवी विरासत के लिए वास्तव में स्पष्ट नहीं है :

function ZParenizor2(value) { 
    var that = new Parenizor(value); 
    that.toString = function() { 
     if (this.getValue()) { 
     return this.uber('toString'); 
     } 
     return "-0-" 
    }; 
    return that; 
} 

ZParenizor, जहां तक ​​मुझे समझा गया है, माता-पिता के संदर्भ में परिभाषित किया गया है। लेकिन माता-पिता आधार वर्ग है और यह किसी से भी प्राप्त नहीं होता है। तो this.uber फ़ंक्शन को परिभाषित नहीं किया जाएगा और वास्तव में मुझे एक त्रुटि है जब मैं toString किसी नए ZParenizor2 ऑब्जेक्ट की विधि को कॉल करता हूं।

क्या मैं सही हूं, या मैं कुछ अनदेखा कर रहा हूं?

अद्यतन मैं सही था। यह विधि केवल तभी काम करती है जब आप पैरामीटर के रूप में 0 के साथ ZParenizor बनाते हैं, क्योंकि इसे uber विधि को कॉल करने की आवश्यकता नहीं है (जैसा कि आप विधि इम्प्लेमेंटेशन फॉर्म देख सकते हैं)।

Uncaught TypeError: Object #<error> has no method 'uber' 
+1

सभी ऑब्जेक्ट्स कम से कम 'ऑब्जेक्ट.प्रोटोटाइप' से प्राप्त होते हैं ... –

+1

ठीक है, त्रुटि क्या कहती है? –

+0

हां। त्रुटि जो मैंने सोचा था, लेकिन एक टाइपो के कारण नहीं था। हालांकि मैंने इस तथ्य के बारे में नहीं सोचा है कि सभी वस्तुओं को क्रियाओं से प्राप्त किया जाता है जो वस्तुएं हैं। धन्यवाद! – user278064

उत्तर

2

आप एक uber समारोह के लिए Parenizor के प्रोटोटाइप को संशोधित कर सकते हैं और यह किसी भी अन्य मूल्य के साथ काम करेंगे:

जब आप यह एक अलग पैरामीटर के साथ की कोशिश, मैं इस त्रुटि मिलती है।

+0

आप सही हैं। लेकिन तथ्य यह है कि लेखक ने उन उत्तराधिकारी वस्तुओं को केवल उबर समारोह देने का फैसला किया, मा मुझे लगता है। – user278064

+0

हां उस संदर्भ में यह पूरी तरह से बेकार लगता है, हालांकि यह केवल 'विरासत' वस्तु को क्या उपयोग दिया जाता है इस पर निर्भर करेगा – Chiguireitor

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