2017-09-20 18 views
0

La question est en détail ci-dessous. J'ai lu le guide Mozilla sur l'héritage multiple et je vois que nous pouvons hériter des méthodes d'une autre méthode de prototype de constructeur en utilisant call ou apply, pour définir le contexte, et en configurant manuellement le prototype comme suit.JavaScript - Utiliser Affecter pour hériter des fonctions de plusieurs prototypes?

function Person(){ 
} 
function Programmer(){ 
Person.call(this); 
} 
Programmer.prototype = Object.create(Person.prototype); 

On peut aussi faire l'héritage multiple en appelant plusieurs constructeurs, mais qui fonctionne tout simplement sur les propriétés définies dans les constructeurs de parents. Ma question est, comment hérite-t-on de plusieurs prototypes, correctement? Que faire si j'utilise Object.Assign(), comme suit.

function Person(){ 
} 
function Programmer(){ 
} 
function Employee(){ 
Person.call(this); 
Programmer.call(this); 
} 

Object.assign(Employee.prototype, Person.prototype); 
Object.assign(Employee.prototype, Devolper.prototype); 

Ceci traiterait les constructeurs de Parent comme s'ils étaient des Mixins, correct? Au lieu de pointer vers le prototype parent, nous copions les propriétés dans le prototype employé. De plus, si les parents ont les mêmes méthodes, l'ordre dans lequel les prototypes sont assignés entrerait en jeu. Nous n'avons pas non plus besoin de mettre à l'échelle le lien du prototype. Nous n'avons pas non plus besoin de définir explicitement le constructeur. typeof ne fonctionnerait pas, le typage de canard est mieux de toute façon .. rite? Merci.

Si ma question a reçu une réponse, veuillez la fermer. Si la question n'a pas de sens, s'il vous plaît faites le moi savoir. Merci!

Répondre

1

C'est tout correct (mais continuez à lire), autre que ce que je suppose sont les fautes de frappe dans la question:

  • Il est Object.create, pas Object.Create
  • Il est Object.assign, pas Object.Assign
  • Vous avez probablement voulu dire à utiliser Programmer.prototype dans le deuxième appel

Vous pouvez également le faire en un seul appel:

Object.assign(Employee.prototype, Person.prototype, Programmer.prototype); 

Mais oui, qui utilise Person.prototype et Programmer.prototype comme mixins.