2013-05-31 9 views
6

मैं पैटर्नजे एस मॉड्यूल पैटर्न ओवरराइड समारोह

BASE = function() { 
    var that = {}; 
    var number = 10; 

    that.showNumber = function(){ 
     that.alertNumber(); 
    } 

    that.alertNumber = function() { 
     alert(number); 
    };  
    return that; 
}; 

CHILD = function() { 
    var that = Object.create(BASE()); 
    var secondNumber = 20; 

    // Override base function 
    that.alertNumber = function() { 
     alert(secondNumber); 
    }; 
    return that; 
}; 

var ch = CHILD(); 
ch.showNumber(); 

आप मुझे बता सकते मैं अपने मॉड्यूल पैटर्न डगलस Crockford से प्रेरित पूरी तरह से alerNumber समारोह ओवरराइड करने के लिए कैसे समायोजित कर सकते हैं निम्नलिखित है? अब तक showNumber समारोह 10 20.

के बजाय प्रदर्शित करता है कोड के साथ उन्नत

JSFiddle में आप सभी को धन्यवाद here

+0

प्रोटोटाइप का उपयोग क्यों न करें? यह आसान बना देगा। –

+0

क्यों नहीं लिखते हैं = नया आधार(); ? – frenchie

+0

यह पैटर्न एकाधिक विरासत –

उत्तर

5

आप को

that.showNumber = function(){ 
    that.alertNumber(); 
} 

बदल सकता है

that.showNumber = function(){ 
    this.alertNumber(); 
} 

लेकिन मुझे यकीन नहीं है कि मैं देखता हूं y आप बस the prototype-base inheritance model का उपयोग नहीं करते हैं।

+0

की अनुमति देता है यह वह चीज है जिसे मैं पूरी तरह से समझ नहीं पा रहा हूं। आधार पर 'this.alertNumber()' को 'बेस' क्लास' में संदर्भित क्यों किया जाता है? –

+0

यह पैटर्न जो आप उपयोग करते हैं, यह सुनिश्चित करने के लिए बंद करने में एक 'चर' चर सेट करता है कि फ़ंक्शन शो नम्बर कन्स्ट्रक्टर में परिभाषित उदाहरण का उपयोग कर रहा है, इस प्रकार अधिकांश उन्नत विरासत योजनाएं काम नहीं कर रही हैं (उदाहरण के लिए एक सुपरक्लस फ़ंक्शन किसी अन्य फ़ंक्शन को कॉल करना और इसे देना अधिरोहित)। –

+0

ठीक है तो अगर मैं इसे अच्छी तरह से प्राप्त करता हूं, जब मैं पैरेंट फ़ंक्शन को ओवरराइड करने में सक्षम होना चाहता हूं तो मुझे अलग-अलग पैटर्न का उपयोग करना होगा? मुझे इस तरह के नोबिश सवालों के लिए खेद है, लेकिन मुझे केवल जावा के साथ अनुभव है जहां विरासत पूरी तरह से अलग है। –

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