Chcę używać EcmaScript 6 (przez Browserify i Babelify) w nowym projekcie, ale zależy to od bibliotek stron trzecich napisanych w ES5. Problem polega na tworzeniu podklas w moim projekcie, które rozciągają się od tych w bibliotekach.Rozszerzanie klas EcmaScript 5 w kodzie ES6
Np:
// 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;
}
}
To prawie działa oprócz tego Creature() Konstruktor nie jest uruchamiany. I opracowali obejście/siekać który konstruuje obiekt klasy nadrzędnej pierwszy, a następnie dodaje do niej rzeczy:
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;
}
}
Takie podejście wydaje się działać tak długo, jak oryginalna klasa nie posiada funkcji „konstruktora”.
Moje pytanie brzmi: czy to najlepszy sposób na ich rozszerzenie przy korzystaniu z klas ES6 (oprócz pytania autora biblioteki o migrację)? Czy jest jeszcze lepszy sposób? Chciałbym nadal używać składni klasy {} w moim projekcie.
Babel opiera się na klasach ES5, odpowiednio ustawiając "Creature.prototype.constructor = Creature", może nie robisz tego właściwie? Jeśli klasa nadrzędna jest bezwzględną podstawą, powinno to nastąpić automatycznie, ale jeśli klasa nadrzędna ma swojego rodzica, możliwe jest, że ma zły ".constructor". – loganfsmyth