Programy pobierające i ustawiające w ES6 mają zasadniczo inną motywację niż podobne koncepcje w Javie.
W Javie metody pobierające i ustawiające pozwalają klasie na definiowanie komponentów JavaBean. Celem metod pobierających i ustawiających jest to, że pozwalają one fasoli mieć całkowicie ortogonalny „interfejs” w porównaniu z polami publicznymi. Więc mogę mieć pole „nazwa”, które NIE jest właściwością JavaBean i mogę mieć „adres” właściwości JavaBean, który NIE jest polem.
Właściwości JavaBean są również „wykrywalne” przez tysiące frameworków (na przykład Hibernate) poprzez odbicie języka Java. Zatem metody pobierające i ustawiające są częścią standardowej metody „ujawniania” właściwości fasoli.
Metody pobierające i ustawiające, będąc funkcjami, mają również tę wartość, że „abstraktują” implementację. Może to być ALBO pole lub wartość obliczona („syntetyczna”). Więc jeśli mam właściwość fasoli o nazwie „kod pocztowy”, która zaczyna się jako przechowywany ciąg. A teraz przypuśćmy, że chcę zmienić to na wartość obliczoną na podstawie adresu / miasta / stanu?
Jeśli używam pola, ten kod się psuje:
String zipcode = address.zipcode();
Ale jeśli używam gettera, to się nie psuje:
String zipcode = address.getZipcode();
JavaScript nie ma nic takiego jak JavaBeans. O ile czytałem, zamierzona wartość GET i SET jest ograniczona do wspomnianych powyżej właściwości „syntetycznych” (obliczonych).
Ale jest nieco lepszy niż java, ponieważ podczas gdy Java nie pozwala na kompatybilną konwersję "pola" na metodę, ES6 GET i SET na to pozwala.
To znaczy, jeśli mam:
var zipcode = address.zipcode;
Jeśli zmienię kod pocztowy ze standardowej właściwości obiektu na getter, powyższy kod wywoła teraz funkcję GET.
Zwróć uwagę, że jeśli nie uwzględniłem GET w definicji, NIE wywołałoby to metody GET kodu pocztowego. Zamiast tego po prostu przypisałby kod pocztowy funkcji do zmiennej.
Myślę więc, że są to ważne różnice, które należy odróżnić między metodami pobierającymi i ustawiającymi w języku Java i JavaScript w ES6.