ecmascript 6 - JavaScript new this.constructor(); => SyntaxError: saknas ] efter elementlista
Jag har några lektioner:
class Sample{
static createSelf() {
return new this.constructor(1, 2);
}
}
class AnotherClass extends Sample {
constructor(a, b) {
this.c = a+b;
}
}
ac = AnotherClass.createSelf();
Hur gör jag det?
Detta konkreta exempel ger mig SyntaxError: missing formal parameter, även om i min ursprungliga kod (500 rader), när jag har new this.constructor(), får jag SyntaxError: missing ] after element list pekad på den första raden (felet med formell parameter pekas också på rad 1). Jag vet att det beror på denna rad, eftersom när jag ersätter den med ett vanligt klassnamn, fungerar det. Det finns ingen Array-initialisering som är stängd. Felet kan omöjligen betyda:
Det finns ett fel någonstans i syntaxen för arrayinitialiseringen. Troligtvis saknas en avslutande hakparentes ("]") eller ett kommatecken (",").
från https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Missing_bracket_after_list
UPPDATERA originalkod:
class Participant {
constructor(origin, destination, number, startDate, endDate) {
...
}
static restore(save) {
const participant = new this.constructor(
new Marker(save.originLocation, this.getMarkerOptions(true, save.isDriver, save.number)).addTo(map),
new Marker(save.destinationLocation, this.getMarkerOptions(false, save.isDriver, save.number)).addTo(map),
save.number,
save.startDate,
save.endDate
);
return participant;
};
}
class Driver extends Participant {}
d = Driver.restore(saveObject);
Svar #1
Om felet pekar på den första raden, då är syntaxfelet före koden du publicerade här.
Det visar sig att orsaken till detta fel är att this.constructor hänvisar till Function som kommer att utvärdera ett av de argument som skickas till det som kod. Eftersom du inte skickar JavaScript-kod till det får du ett syntaktiskt fel.
Exempel (öppna din webbläsares konsol):
new Function({});Det finns dock två problem med koden du la upp här också.
this i statiska metoder
Värdet av this beror på hur en funktion anropas. Statisk metoder anropas som metoder av konstruktör-funktionen, därför refererar this till konstruktörsfunktionen. I ditt exempel, med AnotherClass.createSelf();, refererar this till AnotherClass. Därför refererar this.constructor till Function. Jag tror inte att det är vad du vill. Jag antar att du vill
class Sample{
static createSelf() {
return new this(1, 2);
}
}
Det verkar som att du trodde att this skulle referera till en instans av klassen, men hur skulle det kunna? Du har inte skapat någon än.
this i konstruktörer
När en klass ärver från en annan klass måste du alltid kalla på super() i konstruktören innan du får tillgång till this:
class AnotherClass extends Sample {
constructor(a, b) {
super();
this.c = a+b;
}
}
