6

मैं जावास्क्रिप्ट प्रोग्रामिंग के लिए नया हूं और मुझे विरासत के साथ एक दुःस्वप्न का सामना करना पड़ रहा है। मैं एपसेलरेटर टाइटेनियम के लिए कुछ कोड लिख रहा हूं और मेरे पास स्लाईड 2 डी नामक बेस क्लास है मैं से प्राप्त करना चाहता हूं।प्रोटोटाइप का उपयोग करते समय जावास्क्रिप्ट विरासत समस्या - उदाहरण ओवरराइट किए गए :(

इसलिए मैंने स्लाइड 2 डी के प्रोटोटाइप में कुछ फ़ंक्शन लगाए हैं। इन्हें आम तौर पर ओवरराइट नहीं किया जा रहा है, लेकिन स्लाइड 2 डी से प्राप्त कक्षाओं से कहा जाएगा। इन कार्यों को अन्य भागों से भी बुलाया जाएगा कार्यक्रम। टाइटेनियम में एनीमेशन का प्रबंधन करने के लिए विभिन्न इवेंटहालर भी इस्तेमाल किए जाते हैं।

यदि मैं कुछ कॉलिंग कोड (नए का उपयोग करके) में इन स्लाइडों में से कुछ बना देता हूं

var s = new Slide2D('slide1', 'background1.png', etc...... 
var t = new Slide2D('slide2', 'background2.png', etc...... 

मेरे सभी प्रोटोटाइप विधियां आखिरी स्लाइड 2 डी को इंगित करती हैं, भले ही मैं एस या टी का उपयोग करता हूं। तो 'स्लाइड 2' हमेशा प्रदर्शित किया जाएगा, भले ही मैं एस चर का उपयोग कर रहा हूं।

यह मुझे पागल कर रहा है - किसी भी मदद की सराहना की जाएगी।

कोड की लंबाई के लिए क्षमा करें, लेकिन यहाँ यह है:

function Slide2D(name, backgroundImage, transform, inAnimation, outAnimation) 
{ 
Titanium.API.info('Slide2D - Constructor - ' + name); 

var _self = this; 

var _name = name; 

var _backgroundImage = backgroundImage; 

var _startingTransform = transform; 

var _slideView = Titanium.UI.createView({ 
    backgroundImage: _backgroundImage, 
    transform: transform 
}); 

    var _animateInAnimation = Titanium.UI.createAnimation(); 
_animateInAnimation.transform = Titanium.UI.create2DMatrix().translate(0,0); 
_animateInAnimation.duration = 750; 

var _animateOutAnimation = Titanium.UI.createAnimation(); 
_animateOutAnimation.transform = Titanium.UI.create2DMatrix().translate(-1024,0); 
_animateOutAnimation.duration = 750; 

var onAnimateInStart = function() 
{ 
    Titanium.API.info('Slide2D.onAnimateInStart'); 
    Titanium.App.fireEvent('animateInStart', {slideName: _name}); 

    _animateInAnimation.removeEventListener('start', onAnimateInStart); 
}; 

var onAnimateOutStart = function() 
{ 
    Titanium.API.info('Slide2D.onAnimateOutStart'); 
    Titanium.App.fireEvent('animateOutStart', {slideName: _name}); 

    _animateInAnimation.removeEventListener('start', onAnimateOutStart); 
}; 

var onAnimateInComplete = function() 
{ 
    Titanium.API.info('Slide2D.onAnimateInComplete'); 
    Titanium.App.fireEvent('animateInComplete', {slideName: _name}); 

    _animateInAnimation.removeEventListener('complete', onAnimateInComplete); 
}; 

var onAnimateOutComplete = function() 
{ 
    Titanium.API.info('Slide2D.onAnimateOutComplete'); 
    Titanium.App.fireEvent('animateOutComplete', {slideName: _name}); 

    _animateOutAnimation.removeEventListener('complete', onAnimateOutComplete); 
}; 

_animateInAnimation.addEventListener('start', onAnimateInStart); 
_animateOutAnimation.addEventListener('start', onAnimateOutStart); 

_animateInAnimation.addEventListener('complete',onAnimateInComplete); 
_animateOutAnimation.addEventListener('complete', onAnimateOutComplete); 

Slide2D.prototype.animateIn = function(){ 
    Titanium.API.info('Slide2D.prototype.animateIn - ' + _name); 

    _slideView.animate(_animateInAnimation); 
}; 

Slide2D.prototype.animateOut = function(){ 
    Titanium.API.info('Slide2D.prototype.animateOut'); 

    _slideView.animate(_animateOutAnimation); 
}; 

    Slide2D.prototype.getName = function() 
{ 
    return _name; 
}; 

Slide2D.prototype.getView = function(){ 
    Titanium.API.info('Slide2D.prototype.getView'); 
    return _slideView; 
}; 

Slide2D.prototype.getStartingTransform = function(){ 
    return _startingTransform; 
}; 
}; 

संपादित करें आपके शीघ्र उत्तर के लिए बहुत बहुत

धन्यवाद। मैंने आपके द्वारा सुझाए गए परिवर्तन किए हैं और इसने उस विशेष समस्या का समाधान किया है।

हालांकि, एक नया मुद्दा पेश किया गया है।

मुझे एक व्युत्पन्न क्लास - ExtendedSlide2D से Slide2D.prototype.getView को कॉल करने की आवश्यकता है।

हालांकि, अब मैं निम्नलिखित त्रुटि मिलती है:

Result of expression 'Slide2D.prototype.getView()' [undefined] is not an object 
    at ExtendedSlide2D.js at line ....... 

यह वह जगह है जहाँ मैं आधार वर्ग का दृष्टिकोण वस्तु के लिए बटन जोड़ें।

मुझे यकीन है कि यह त्रुटि सिर्फ भाषा के साथ मेरे अनुभवहीनता के लिए नीचे आती है, लेकिन, एक बार फिर, किसी भी मदद की सराहना की जाएगी।

Titanium.include('Slide2D.js'); 



function ExtendedSlide2D(name, backgroundImage, transform, inAnimation, outAnimation) 
{ 

Titanium.API.info('ExtendedSlide2D - Constructor'); 


this.base = new Slide2D(name, 
          backgroundImage, 
          transform, 
          inAnimation,  
          outAnimation); 



ExtendedSlide2D.prototype.constructor = ExtendedSlide2D; 



var button = Titanium.UI.createButton({title: 'AnimateOut', 
              height: 40, 
              width: 200, 
              top: 50 

}); 

button.addEventListener('click', function() 

{ 
    Slide2D.prototype.animateOut(); 

}); 


Slide2D.prototype.getView().add(button); 
} 



ExtendedSlide2D.prototype = new Slide2D(); 
+0

मैंने आपके प्रश्न के साथ अपना जवाब विलय कर लिया है और आपके खाते को डी-डुप्लिकेट कर दिया है।कृपया अपने खाते के साथ ओपनआईडी को जोड़ने या पंजीकरण करने पर विचार करें। –

उत्तर

2

आप तरीकों कि आप Slide2D निर्माता समारोह के बाहर प्रोटोटाइप को जोड़ने को ले जाना होगा: -

एक बार फिर यहां ExtendedSlide2D के लिए कोड है। इस तरह वे केवल प्रत्येक ऑब्जेक्ट त्वरण के बजाय एक बार परिभाषित हो जाते हैं।

और फिर उन प्रोटोटाइप कार्यों के लिए "आंतरिक" जैसे _name, _slideView, आदि तक पहुंचने के लिए ... आपको अपने सभी "वर्र्स" (वर्तमान में बंद होने के तहत सुलभ) को ऑब्जेक्ट के गुणों में परिवर्तित करने की आवश्यकता होगी । फिर उन सभी सदस्य गुणों को "यह" के साथ संदर्भित करें। उपसर्ग।

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

function Slide2D(name, backgroundImage, transform, inAnimation, outAnimation) { 

    Titanium.API.info('Slide2D - Constructor - ' + name); 

    _self = this; 

    this._name = name; 

    this._backgroundImage = backgroundImage; 

    this._startingTransform = transform; 

    this._slideView = Titanium.UI.createView({ 
     backgroundImage: this._backgroundImage, 
     transform: transform 
    }); 

    this._animateInAnimation = Titanium.UI.createAnimation(); 
    this._animateInAnimation.transform = Titanium.UI.create2DMatrix().translate(0, 0); 
    this._animateInAnimation.duration = 750; 

    /// ... 

}; 

Slide2D.prototype.animateIn = function() { 
    Titanium.API.info('Slide2D.prototype.animateIn - ' + this._name); 

    this._slideView.animate(this._animateInAnimation); 
}; 

Slide2D.prototype.animateOut = function() { 
    Titanium.API.info('Slide2D.prototype.animateOut'); 

    this._slideView.animate(this._animateOutAnimation); 
}; 

Slide2D.prototype.getName = function() { 
    this._name; 
}; 

Slide2D.prototype.getView = function() { 
    Titanium.API.info('Slide2D.prototype.getView'); 
    this._slideView; 
}; 

Slide2D.prototype.getStartingTransform = function() { 
    this._startingTransform; 
};