Desidero utilizzare EcmaScript 6 (tramite Browserify e Babelify) in un nuovo progetto, ma dipende da librerie di terze parti scritte in ES5. Il problema è la creazione di sottoclassi nel mio progetto che si estendono da quelle presenti nelle librerie.Estensione di classi EcmaScript 5 nel codice ES6
es:
// Library written in ES5
function Creature(type) {
this.type = type;
}
// my code in ES6
class Fish extends Creature {
constructor(name) {
super("fish");
this.name = name;
}
}
Questo quasi funziona, tranne quella creatura() costruttore non viene eseguito. Ho realizzato una soluzione/mod che costruisce oggetto della classe genitore prima e quindi aggiunge roba ad esso:
class Fish extends Creature {
constructor(name) {
super("throw away"); //have to have this or it wont compile
let obj = new Creature("fish");
obj.name = name;
return obj;
}
}
Questo approccio sembra funzionare fino a quando la classe originale non ha funzione di "costruttore".
La mia domanda è: è il modo migliore per estenderli quando si utilizzano le classi di ES6 (salvo chiedere all'autore della libreria di migrare)? O c'è un modo ancora migliore? Mi piacerebbe continuare ad usare la sintassi class {} nel mio progetto.
Babel si affida alle classi ES5 impostando correttamente "Creature.prototype.constructor = Creature", forse non lo stai facendo correttamente? Se la classe genitore è la base assoluta, ciò dovrebbe accadere automaticamente, ma se la classe genitore ha il suo genitore, è possibile che abbia il "costruttore" sbagliato. – loganfsmyth