I getter e setter ES6 hanno una motivazione sostanzialmente diversa rispetto ai concetti simili in Java.
In Java, getter e setter consentono a una classe di definire un JavaBean. Il punto di getter e setter è che consente al bean di avere un'interfaccia "completamente ortogonale" da quella implicita dai campi pubblici. Quindi posso avere un campo "nome" che NON è una proprietà JavaBean, e posso avere un "indirizzo" di proprietà JavaBean che NON è un campo.
Le proprietà JavaBean sono anche "rilevabili" da migliaia di framework (ad esempio Hibernate) tramite Java reflection. Pertanto, getter e setter fanno parte di un metodo standard per "esporre" le proprietà dei bean.
Getter e setter, essendo funzioni, hanno anche il valore che "astraggono" l'implementazione. Può essere EITHER un campo o un valore calcolato ("sintetico"). Quindi, se ho una proprietà bean chiamata "zipcode", inizia come stringa memorizzata. Ora supponiamo che voglio cambiarlo per essere un valore calcolato da indirizzo/città/stato?
Se io uso un campo, questo codice si rompe:
String zipcode = address.zipcode();
Ma se io uso un getter, questo non rompere:
String zipcode = address.getZipcode();
JavaScript non ha nulla di simile JavaBeans. Per quanto ho letto, il valore previsto di GET e SET è limitato alle proprietà "sintetiche" (calcolate) di cui sopra.
Ma è un po 'meglio di Java in quanto, mentre Java non consente di convertire un "campo" in modo compatibile con un metodo, ES6 GET e SET lo consentono.
Cioè, se ho:
var zipcode = address.zipcode;
Se cambio codice postale dall'essere una proprietà dell'oggetto standard per un getter, il codice sopra chiama ora la funzione GET.
Si noti che se non includessi GET nella definizione, questo NON richiamerebbe il metodo GET di zipcode. Invece, assegnerebbe semplicemente la funzione zipcode al var.
Quindi penso che queste siano alcune distinzioni importanti per comprendere i getter e setter di Java e JavaScript ES6.
È simile a quelli in C#, se vi capita di saperlo. –
Correlati: [Qual è l'argomento per l'utilizzo di getter e setter ES6 rispetto alla convenzione getProperty/setProperty?] (Http://stackoverflow.com/q/32114468/1048572) – Bergi
Un buon articolo che spiega proprio questo può essere trovato su: https://coryrylan.com/blog/javascript-es6-class-syntax "Nella nostra classe di sopra abbiamo un getter e setter per la nostra proprietà name Usiamo la convenzione '_' per creare un backing field per memorizzare la nostra proprietà name. questo ogni volta che get o set viene chiamato causerebbe un overflow dello stack "... Si parla anche della variabile che non è veramente 'privata', ma ci sono numerosi nuovi modi per creare private vars nelle classi JS; il mio preferito è solo usare Typescript, ma ho usato anche l'approccio Symbol – webdevinci