Getter e setter ES6 hanno una motivazione sostanzialmente diversa rispetto a 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 una "interfaccia" completamente ortogonale rispetto a quella implicita nei campi pubblici. Quindi posso avere un "nome" di campo 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 (Hibernate per esempio) tramite la riflessione Java. 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 di "astrarre" l'implementazione. Può essere SIA un campo che un valore calcolato ("sintetico"). Quindi, se ho una proprietà bean chiamata "zipcode", questa inizia come stringa memorizzata. Supponiamo ora di volerlo modificare in modo che sia un valore calcolato da indirizzo / città / stato?
Se utilizzo un campo, questo codice si rompe:
String zipcode = address.zipcode();
Ma se uso un getter, questo non si rompe:
String zipcode = address.getZipcode();
JavaScript non ha nulla di simile a 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 compatibilmente un "campo" in un metodo, ES6 GET e SET lo consentono.
Cioè, se ho:
var zipcode = address.zipcode;
Se cambio il codice postale da una proprietà oggetto standard a un getter, il codice sopra ora chiama la funzione GET.
Nota che se non includessi GET nella definizione, questo NON richiamerebbe il metodo GET del codice postale. Invece, assegnerebbe semplicemente la funzione zipcode al file var.
Quindi penso che queste siano alcune importanti distinzioni da capire tra getter e setter Java e JavaScript ES6.