2010-07-01 4 views
3

Je sais que je pouvais faire un simple héritage prototypal en JavaScript comme ceci:Héritage profond avec JavaScript?

var Parent = function() { 
}; 

var Child = function() { 
} 

Child.prototype = new Parent(); 
Child.prototype.constructor = Child; 

Cependant, je suis curieux de la façon dont on pourrait accomplir plus profondes héritages? Qu'en est-il de l'héritage multiple, est-ce possible?

Répondre

6

Vous ne pouvez pas effectuer plusieurs héritages dans JavaScript. Vous pouvez faire de l'héritage plus profond simplement d'aller plus loin:

var Parent = function() {}; 
var Child = function() {}; 
var InnerChild = function() {}; 

Et pour montrer cela fonctionne:

Parent.prototype.x = 100; 
Child.prototype = new Parent(); 
Child.prototype.y = 200; 
InnerChild.prototype = new Child(); 
InnerChild.prototype.z = 300; 

var ic = new InnerChild(); 
console.log(ic.x); //prints 100, from Parent 
console.log(ic.y); //prints 200, from Child 
console.log(ic.z); //prints 300, from InnerChild, who only wants to express itself 
+0

Bonne réponse. J'ajouterai que même si vous ne pouvez pas faire de l'héritage multiple, il n'est pas difficile de faire une approche de "mix-in" en utilisant, par exemple, les fonctions "extend" fournies par des bibliothèques telles que jQuery ou underscore.js. –

+0

Je ne vois pas en quoi ce n'est pas l'héritage multiple (si vous pouvez faire l'héritage du tout en javascript). Voici une fonction extend, qui présente l'avantage supplémentaire de rendre la méthode superclass disponible: var extend = fonction (classObject, superClass) { pour (var i dans superClass.prototype) { if (classObject.prototype [i] classObject.prototype ["_ super_" + i] = superClass.prototype [i]; sinon classObject.prototype [i] = superClass.prototype [i]; } }; – rob

+0

étendre est une sorte d'héritage multiple, je suppose. Ce n'est pas l'héritage multiple, cependant, c'est "ajouter toutes les propriétés d'un objet à un autre". par exemple. instanceof ne fonctionnera pas correctement. c'est une course de fou d'appliquer des techniques de POO au javascript de toute façon, cependant, car c'est vraiment l'héritage du prototype. écrire du code et dire «ceci est un héritage multiple» ne fait qu'embrouiller le problème. – Claudiu