2012-07-17 15 views
29

मैं निम्नलिखित कोड है:कॉलिंग coffescript सुपर तरीकों

class Animal 
     constructor: (@name) -> 
     say:() -> console.log "Hello from animal called #{ @name }" 

    class Dog extends Animal 

     say:() -> 
      super.say() 
      console.log "Hello from dog called #{ @name }" 

    a = new Animal('Bobby') 
    a.say() 

    d = new Dog("Duffy") 
    d.say()    

परिणाम

Hello from animal called Bobby 
Hello from animal called Duffy 
Hello from dog called Duffy 

नहीं है लेकिन मैं निम्नलिखित त्रुटि मिलती है:

Hello from animal called Bobby 
Hello from animal called Duffy 
Uncaught TypeError: Cannot call method 'say' of undefined 

कैसे सुपर आने अपरिभाषित है ? इसे विस्तारित करने के लिए अभिभावक विधि को कैसे कॉल करें? धन्यवाद

+0

आपका अनुमान मेरा अनुमान था ... मुझे आश्चर्य है कि क्यों वे सिर्फ यह व्यावहारिक रूप से हर किसी का अनुमान लगाता है यह होना चाहिए की तरह काम नहीं किया? शायद एक दिलचस्प चर्चा – PandaWood

उत्तर

63

मैं इस सवाल का जवाब अपने आप को मिल गया है, यह होना चाहिए:

class Dog extends Animal 

    say:() -> 
     super 
     console.log "Hello from dog called #{ @name }" 
+5

अपने उत्तर को सही के रूप में चिह्नित करने में संकोच न करें। – TheHippo

+2

यह 'सुपर() 'नहीं होना चाहिए? –

+2

@Ryan_IRL आपको सुपर कॉल करते समय '()' का उपयोग करने की आवश्यकता नहीं है। संकलक बता सकता है कि जब आप 'सुपर' कीवर्ड का उपयोग करते हैं तो आप फ़ंक्शन का आह्वान कर रहे हैं। – grammar

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