2017-10-09 90 views
0
class Animal{ 
    constructor(){...} 
    walk(){ console.log('Animal walking...')} 
} 

class Mammal extends Animal{ 
    constructor(){...} 
    walk(){console.log('Mammal walking...')} 
} 

class Cat extends Mammal{ 
    constructor(){} 
    walk(){console.log('Cat walking...')} 
} 

在上面的類層次結構,我想打電話給動物的步行()從實施對象如何調用JavaScript對象的根類方法?

我想:

class Cat extends Mammal{ 
    constructor(){} 
    walk(){ 
    super.super.walk() 
    } 
} 

但我得到的錯誤:

Uncaught TypeError: Cannot read property 'walk' of undefined

+1

你可以試試 - >'動物.prototype.walk.call(c)' – Keith

+1

'Animal.prototype.walk()',如果你想在chi的上下文中調用它, ld class'Animal.prototype.walk.call(c)' – taha

+0

@Keith,taha:那有效。非常感謝 – Naveen

回答

1

調用動物的步行()從)方法繞過哺乳動物的路程(

class Cat extends Mammal{ 
    walk(){ 
    Animal.prototype.walk.call(this) 
    } 
} 

通過Keithtaha建議

1

您不能撥打來自實例外部的210個,只能來自正在進行繼承的類。

class Cat extends Mammal { 
    walk() { 
    super.walk() 
    } 
} 

如果你想從你的Cat類調​​用Animal類的walk()方法,在你的Mammal類不重寫。這將允許MammalAnimal繼承walk()

class Animal { 
    walk() { console.log('Animal walking...') } 
} 

class Mammal extends Animal { 
    // don't override walk if you don't have to 
} 

class Cat extends Mammal { 
    walk() { 
    super.walk() // will print 'Animals walking...' 
    } 
} 
+0

這叫做Mammal的walk()方法。我想繞過它並調用Animal的walk()方法。謝謝! – Naveen

+0

你爲什麼要這麼做? – Soviut

+1

@Naveen我已經更新了我的答案來解釋超級鏈接,但是你真的不應該用適當的OOP繼承來做到這一點。 – Soviut

相關問題