2017-10-09 7 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...')} 
} 

Dans la hiérarchie des classes ci-dessus, je voudrais appeler la marche des animaux () mise en œuvre d'un Cat objetComment appeler les méthodes de classe racine d'un objet javascript?

j'ai essayé:

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

Mais je reçois l'erreur:

Uncaught TypeError: Cannot read property 'walk' of undefined

+1

Vous pouvez essayer -> 'animaux .prototype.walk.call (c) ' – Keith

+1

' Animal.prototype.walk() 'et si vous voulez l'appeler dans le contexte du chi ld class 'Animal.prototype.walk.call (c)' – taha

+0

@Keith, taha: Cela a fonctionné. Merci beaucoup – Naveen

Répondre

1

Appel méthode de promenade() Animaux de Cat, sans passer par la marche des mammifères():

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

Suggérée par Keith et taha

1

Vous ne pouvez pas appeler super de l'extérieur d'une instance, seulement de l'intérieur de la classe qui fait l'héritage.

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

Si vous voulez appeler la méthode walk() classe Animal de votre classe Cat, ne l'emporte pas sur elle dans votre classe Mammal. Cela permettra Mammal d'hériter le walk() de Animal.

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

Cela appelle la méthode walk() de Mammal. Je veux contourner cela et appeler la méthode de marche() d'Animal. Merci! – Naveen

+0

Pourquoi voudriez-vous faire cela? – Soviut

+1

@Naveen J'ai mis à jour ma réponse pour expliquer le super chaînage, mais vous ne devriez pas avoir à le faire avec un héritage de POO approprié. – Soviut