Mi chiedo se ciò che segue è in conformità con le specifiche ES6:È possibile chiamare un super setter nelle classi ereditate da ES6?
class X {
constructor(name) {
this._name = name;
}
get name() {
return this._name;
}
set name(name) {
this._name = name + "X";
}
}
class Y extends X {
constructor(name) {
super(name);
}
set name(name) {
super.name = name;
this._name += "Y";
}
}
L'idea è che let y = new Y(""); y.name = "hi"
dovrebbe risultare in y.name === "hiXY"
essere vera.
Per quanto posso dire, questo non funziona in Chrome con il flag ES6 attivato. Inoltre, non funziona con Babel con il flag es2015
. Sta usando super.name = ...
in un setter ereditato che non fa parte delle specifiche ES6? O si tratta di un bug nell'implementazione di Babel?
Definire "non funziona"? Stai sovrascrivendo 'get name' dalla classe base definendo' set name' sul child senza un matching 'get name() {return super.name; } '. È questo il problema? – loganfsmyth
@ DenysSéguret No, perché voglio che il setter del super venga eseguito (aggiungendo una X alla fine del nome). – TAGraves
@loganfsmyth Hai ragione! Non mi ero reso conto che la definizione di "nome set" avrebbe annullato "ottieni nome". Sembra funzionare una volta che aggiungo anche il getter! Grazie! – TAGraves