2017-08-14 1 views
0

J'ai une classe de base (mobile.js)ES6 export classe étendue et puis l'importer

class Mobile { 
    constructor() { 
     ... 
    } 
    method(msg){ 
     ... 
    } 
} 
module.exports = Mobile; 

Puis-je importer à (mobileextended.js);

import Mobile from './mobile'; 

class MobilePhone extends Mobile { 
    method(){ 
     super.method('hello world!'); 
    } 
} 
module.exports = MobilePhone; 

Et à la fin, je veux importer à mobilephone.js:

import MobilePhone from './mobileextended.js'; 

    MobilePhone.method(); 

Comment puis-je faire ce travail dans le style ES6? Parce que maintenant je ne peux pas lire la propriété 'ouverte' de l'erreur indéfinie.

Répondre

0

Si vous voulez nommer les choses dans le bon endroit où vous les importez, comme

import Mobile from './Mobile' 

vous devez utiliser une exportation par défaut, comme

export default Mobile 

de l'endroit où Mobile est défini.


Comparez cela avec une exportation ayant nommé

export class Mobile { ... } 

et importer ce nom spécifique dans un module distinct.

import {Mobile} from Mobile 

Cependant, comme l'a souligné loganfsmyth dans les commentaires, ce n'est pas la source de votre erreur. Pour utiliser une méthode non statique, vous devez créer une instance de cette classe.

const mobilePhone = new MobilePhone() 
mobilePhone.method() 
+0

Ils n'instancent jamais non plus la classe. – loganfsmyth

+0

Whops, ne faisait pas attention au code réel, seule la question. Ajouté la remarque. Merci! –

+0

J'ai essayé votre solution mais j'ai ERREUR: L'expression super doit être nulle ou une fonction, non indéfinie à la place. Pouvez-vous s'il vous plaît écrire le code de la façon dont il devrait être écrit en ES6 afin que je puisse me familiariser avec lui? – lelMan