2017-06-28 2 views
0

J'ai essayé de faire fonctionner cela depuis un certain temps maintenant et continue de me donner indéfini.Javascript héritage appel et appliquer

function A(first, last){ 
 
    this.first = first; 
 
    this.last = last; 
 
} 
 

 
A.prototype.concat = function(){ 
 
    return this.last + this.first; 
 
} 
 

 
function B(first, last){ 
 
    A.call(this, first, last); 
 
    this.type = 'Long'; 
 
} 
 

 
B.prototype.concat = function(){ 
 
    A.prototype.concat.apply(this, arguments); 
 
} 
 

 
var a = new B('A', 'B'); 
 
console.log(a.concat());

que quelqu'un peut me aider à comprendre ce que je suis absent? Si ma méthode concat sur A accepte un paramètre, alors cela fonctionne, mais pas sans elle.

+1

'nom.prototype.concat' devrait être' A.prototype.concat'? – Barmar

+0

Si je corrige cela, le résultat est 'BA'. Est-ce exact? – Barmar

+0

Quel est le but de 'B'? Vous ne l'utilisez jamais. – Barmar

Répondre

2

Vous devez faire

B.prototype.concat = function() { 
    return A.prototype.concat.apply(this, arguments); 
//^^^^^^ 
}; 

mais bien sûr le point d'héritage entier est que vous n'avez pas besoin d'une fonction d'emballage lorsque vous ne voulez pas intercepter quoi que ce soit, mais serait en mesure d'appeler la méthode héritéedirectement:

B.prototype.concat = A.prototype.concat; 

ou mieux, pour faire la classe héritera toutes méthodes de la dynamique prototype A:

B.prototype = Object.create(A.prototype);