Programy pobierające i ustawiające ES6 mają istotnie inną motywację niż podobne koncepcje w języku Java.
W języku Java, moduły pobierające i ustawiające umożliwiają klasie definiowanie obiektu JavaBean. Punktami pobierającymi i ustawiającymi jest to, że pozwala to na to, aby komponent bean był całkowicie ortogonalny "z interfejsu" sugerowanego przez pola publiczne. Mogę więc mieć pole "name", które NIE jest właściwością JavaBean, i mogę mieć właściwość JavaBean "address", która NIE jest polem.
Właściwości JavaBean są również "wykrywalne" przez tysiące frameworków (na przykład Hibernate) poprzez odbicie Java. Tak więc, pobierające i ustawiające są częścią standardowej metody "eksponowania" właściwości komponentu bean.
Programy pobierające i ustawiające, będące funkcjami, mają również wartość, że "abstrakcyjnie" implementują. Może to być zarówno pole, jak i obliczona ("syntetyczna") wartość. Więc jeśli mam właściwość bean o nazwie "zipcode", która zaczyna się jako zapisany ciąg znaków. Teraz przypuśćmy, że chcę go zmienić na wartość wyliczoną z adresu/miasta/państwa?
Jeśli używam pole kod ten łamie:
String zipcode = address.zipcode();
Ale jeśli mogę użyć getter, to nie łamie:
String zipcode = address.getZipcode();
JavaScript nie ma czegoś takiego JavaBeans. O ile przeczytałem, zamierzona wartość GET i SET jest ograniczona do wcześniejszych właściwości "syntetycznych" (obliczanych).
Ale to trochę lepsze niż java, ponieważ Java nie pozwala na kompatybilną konwersję "pola" do metody, pozwala na to ES6 GET i SET.
To znaczy, jeśli mam:
var zipcode = address.zipcode;
Jeśli zmienić kod pocztowy od bycia średnia własność obiektu do getter, powyższy kod teraz wywołuje funkcję GET.
Należy zauważyć, że jeśli nie uwzględniłem GET w definicji, NIE spowoduje to wywołania metody GET kodu zip. Zamiast tego po prostu przypisze kod funkcji do var.
Sądzę, że są to ważne rozróżnienia, które można zrozumieć między różnymi metodami ustawiania i ustawiania języka Java i JavaScript ES6.
Jest podobny do tych w C#, jeśli wiesz o tym. –
Powiązane: [Jaki jest argument dotyczący używania programów pobierających i ustawiających ES6 w konwencji getProperty/setProperty?] (Http://stackoverflow.com/q/32114468/1048572) – Bergi
Dobry artykuł wyjaśniający tę kwestię można znaleźć pod adresem: https://coryrylan.com/blog/javascript-es6-class-syntax "W naszej klasie powyżej mamy getter i seter dla naszej własności nazwy. Używamy konwencji _, aby utworzyć pole zaplecza do przechowywania naszej własności nazwy. za każdym razem, gdy wywoływany jest set lub get, spowodowałby przepełnienie stosu "... Mówi także o zmiennej, która nie jest prawdziwie" prywatna ", ale istnieje wiele nowych sposobów tworzenia prywatnych zmiennych w klasach JS; moim ulubionym jest po prostu używanie Maszynopisu, ale użyłem także podejścia Symbolu. – webdevinci