ES6 classes, avec des parents dans les différents fichiers, et node.js?
Quelle est la bonne façon de l'utiliser d'une classe définie dans un fichier et de le prolonger d'une autre, dans node.js?
Actuellement, j'ai:
'use strict'
class BasePageHandler {
constructor(app, settings, context) {
}
}
return module.exports;
Dans "l'enfant" fichier de classe que j'ai:
'use strict'
var BasePageHandler = require ('./../BasePageHandler.js');
class FrontpagePageHandler extends BasePageHandler {
constructor(app, settings, context) {
super(app, settings, context);
this.settings = settings;
this.context = context;
}
}
Cela échoue avec l'erreur suivante:
TypeError: Class extends value #<Object> is not a function or null
Remarque, si j'ai le BasePageHandler dans le même fichier, puis ça marche, donc c'est vraiment quand la classe est dans un autre fichier j'ai un problème.
Actuellement l'aide d'un noeud 4.4.0.
Vous pouvez utiliser ES6 les modules natifs Commune JS transformer plugin pour Babel, au lieu
module.exports
. De cette façon, votre code va rester prêt pour le futur pour quand Nœud met en œuvre des modules en mode natif.OriginalL'auteur Andre M | 2016-03-30
Vous devez vous connecter pour publier un commentaire.
Vous devez correctement à l'exportation de votre classe dans
BasePageHandler.js
fichier:Je suis sûr que vous pouvez aussi le mettre sur 1 ligne:
module.exports = class BasePageHandler {
de cette façon, si vous renommez la classe, c'est 1 moins de place pour le changer plus tard.L'événement après avoir fait cela, je suis toujours le même problème? Je suis à l'aide de la
harmony_destructuring
drapeau!J'ai eu un problème similaire où j'essayais de retour de la classe par le module de prise.les exportations dans une fonction. Il a travaillé mais pas comme prévu. En définissant simplement le module.les exportations de la classe, tout a fonctionné comme prévu.
Je l'ai fait aussi, mais il ne fonctionne pas pour moi, toute autre solution merci @madox2
OriginalL'auteur madox2
Accepté la réponse est techniquement très bien, mais vraiment, si vous utilisez ES6 alors vous devriez aller pour le tout et utiliser ES6 d'exportation/importation.
et puis:
OriginalL'auteur jonlink