2012-03-17 15 views
9

लगता है मैं एक समारोह है:जावास्क्रिप्ट में मैं एक प्रोटोटाइप विधि को किसी अन्य प्रोटोटाइप विधि में कैसे कॉल कर सकता हूं?

function test(){} 

test.prototype.method01=function(){ 
    //do something 
} 

test.prototype.method02=function(){ 
    //how can I call the method01? 
    //this.method01()...? 
    //but the chrome through an error: 
    //Uncaught TypeError: Object #<HTMLImageElement> has no method 'method01' 
} 

संपादित: वास्तव में इस तरह method01:

test.prototype.method02=function(){ 
    $('.cpy').resizable({ 

    }).draggable({ 
     start:function(e,ui){ 
      this.method01(); 
     } 
    }); 
} 
+2

आप 'method02' एक छवि का एक घटना के लिए किसी भी संयोग से बताए रहे हैं? – pimvdb

+0

यह * विधि * 2 पर कॉल * कैसे * पर निर्भर करता है। आपको [इस' के बारे में [एमडीएन लेख] पढ़ना चाहिए (https://developer.mozilla.org/en/JavaScript/Reference/Operators/this)। –

+0

@pimvdb: मैंने अपना प्रश्न सुधार लिया है, दिखाएं कि मैं इसे कैसे कॉल करता हूं – hh54188

उत्तर

12
test.prototype.method02=function(){ 
    var testThing = this; 
    $('.cpy').resizable({ 

    }).draggable({ 
     start:function(e,ui){ 
      testThing.method01(); 
     } 
    }); 
} 

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

2

हाँ, आप इस प्रश्न में अन्य उत्तरों जैसे व्याख्यात्मक दायरे में this मैन्युअल रूप से कैश कर सकते हैं। हालांकि, मैं जिस विकल्प का सुझाव दूंगा वह आपके कॉल के रूप में $.proxy या function.bind का उपयोग करके एक बाध्य विधि बनाना है।

बाउंड विधियों को हमेशा एक स्थिर this के साथ बुलाया जाता है। मैं उन्हें बहुत अधिक पठनीय होने के लिए उच्च स्कोप

0

में this को बिज़ारेलि नामित संदर्भ से लगता है क्या के बारे में

test.prototype.method02=function(){ 
    this.method01.apply(this); 
    // do some other stuff 
} 
संबंधित मुद्दे