J'ai été piquer dans certains modules Node.js dans l'espoir d'apprendre quelque chose que je pourrais avoir manqué lors de la création d'un module avec des fonctionnalités similaires. Puis je suis tombé sur ce code de Hound:Héritage bizarre dans Node.js
function Hound() {
//why this?
events.EventEmitter.call(this)
}
//ok, so inheriting the EventEmitter
util.inherits(Hound, events.EventEmitter);
Je sais que la fonction util.inherits()
de Node.js crée une nouvelle instance de Parent comme le prototype du constructeur de l'enfant as stated in the docs:
Le prototype du constructeur sera défini sur un nouvel objet créé à partir de superConstructor.
Donc, si notre constructeur hérite EventEmitter
par util.inherits()
, ce qui est que le code dans le constructeur pour?
ressemble à un mauvais code pour moi –
J'ai déjà vu ce genre de choses de temps en temps. J'ai toujours supposé qu'il était nécessaire d'appeler le super constructeur explicitement sur l'instance en cours de construction. Étant donné cet extrait des docs, je ne sais pas si c'est nécessaire ou non. Peut-être est-ce une vieille convention qui a été abandonnée quand «hériter» a fonctionné différemment? – chesles
ce n'est pas un mauvais code; JavaScript n'a pas toutes les subtilités d'héritage des autres langues. C'est simplement comment node.js s'attend à ce que vous travailliez avec la classe EventEmitter. –