2012-07-17 8 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

これは 'super()'ではないでしょうか? –

+2

@Ryan_IRL superを呼び出すときに '()'を使う必要はありません。コンパイラは、あなたが 'super'キーワードを使うとき、あなたはその関数を呼び出していることを知ることができます。 – grammar

関連する問題