2011-03-09 16 views
5

मैं जावास्क्रिप्ट में आसानी से विस्तार योग्य फॉर्म सिस्टम डिज़ाइन करने की कोशिश कर रहा हूं, लेकिन इसमें कुछ समस्याएं हैं।डिज़ाइन प्रश्न: जावास्क्रिप्ट में पॉलीमोर्फिज्म

एक वेब फॉर्म की कल्पना करें जहां आप व्यंजनों को भर सकते हैं, उन्हें कुछ क्रम में रख सकते हैं, और फिर उन्हें पकाने के लिए शेफ के लिए सबमिट कर सकते हैं। फिर, मान लें कि आपके पास व्यंजनों के 3 वर्ग हैं: सलाद, ऐपेटाइज़र, और मुख्य पाठ्यक्रम। जाहिर है कि प्रत्येक रूप में अलग-अलग फ़ील्ड और विभिन्न रूप होंगे।

जो मैं करने की कोशिश कर रहा हूं वह एक समग्र रूप प्रबंधक है जो अनिवार्य रूप से बेस क्लास व्यंजनों में लेता है और विभिन्न चीज़ों को कॉल करता है, जैसे। सेवफॉर्म(), .फिलफॉर्म(), या createNewForm() लेकिन मैं ' डी इन व्युत्पन्न कक्षाओं में इन सभी चीजों को लागू करने की तरह है।

जावास्क्रिप्ट में इस ओओ संरचना को लागू करने के बारे में जाने का सबसे अच्छा तरीका क्या है? या यह करने का सही तरीका नहीं है? कुछ कोड लिखने के बाद, मैंने खुद को अपने स्वयं के प्रकार सौंपा और लगातार मैन्युअल प्रकार की जांच कर पाया, लेकिन इससे इसे विस्तार करना मुश्किल हो गया।

उत्तर

2

यहाँ मैं क्या कर सकता है:

var Class = function (Parent, props) { 
    var Child, F, i; 

    Child = function() { 
     if (Child.uber && Child.uber.hasOwnProperty("__construct")) { 
      Child.uber.__construct.apply(this, arguments); 
     } 
     if (Child.prototype.hasOwnProperty("__construct")) { 
      Child.prototype.__construct.apply(this, arguments); 
     } 
    }; 

    Parent = Parent || Object; 
    F = function() {}; 
    F.prototype = Parent.prototype; 
    Child.prototype = new F(); 
    Child.uber = Parent.prototype; 
    Child.prototype.constructor = Child; 

    for (i in props) { 
     if (props.hasOwnProperty(i)) { 
      Child.prototype[i] = props[i]; 
     } 
    } 

    return Child; 
}; 

var Recipe = Class(null, { 
    __construct: function (name) { 
     this.name = name; 
    }, 
    getName: function() { 
     return this.name; 
    } 
}); 

var Salad = Class(Recipe, { 
    __construct: function (name) { 
     this.name = name; 
    }, 

    getName: function() { 
     var name = Salad.uber.getName.call(this); 
     return name; 
    } 
}); 

तो इस उदाहरण में, हम क्या सामान्य रूप से जावास्क्रिप्ट में उपलब्ध है की तुलना में नकली अधिक सुनियोजित वस्तु उन्मुख दृष्टिकोण के लिए कक्षा समारोह का उपयोग करें।

हम एक निर्माता और एक उदाहरण विधि के साथ पकाने की विधि परिभाषित करते हैं। फिर हम सलाद वर्ग बनाते हैं जो पकाने की विधि के गुणों और विधियों को विरासत में लेता है, और फिर हम getName विधि को फिर से परिभाषित करते हैं। उस विधि के अंदर, हम उस विधि के अभिभावक वर्ग कार्यान्वयन तक पहुंचने के लिए एक स्थिर संपत्ति का उपयोग करते हैं।

यह कोड Stoyan Stefanov द्वारा "जावास्क्रिप्ट पैटर्न" में प्रस्तुत उदाहरणों पर आधारित है यदि आप इसके बारे में अधिक पढ़ना चाहते हैं।

0

चेक बाहर इन दो लेख और आप कैसे ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग का उपयोग अपने व्यवसाय मुद्दे को हल करने के बारे में प्रेरित हो सकता है:

http://www.cyberminds.co.uk/blog/articles/polymorphism-in-javascript.aspx

http://www.cyberminds.co.uk/blog/articles/how-to-implement-javascript-inheritance.aspx

यदि आपको और सहायता की जरूरत है, हमें ईमेल करें।

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