У геттеров и сеттеров ES6 совершенно другая мотивация, чем у аналогичных концепций в Java.
В Java геттеры и сеттеры позволяют классу определять JavaBean. Смысл геттеров и сеттеров заключается в том, что они позволяют компоненту иметь полностью ортогональный «интерфейс» по сравнению с тем, что подразумевается общедоступными полями. Таким образом, у меня может быть поле «имя», которое НЕ является свойством JavaBean, и у меня может быть «адрес» свойства JavaBean, которое НЕ является полем.
Свойства JavaBean также «обнаруживаются» тысячами фреймворков (например, Hibernate) через отражение Java. Таким образом, геттеры и сеттеры являются частью стандартного метода «раскрытия» свойств компонента.
Геттеры и сеттеры, будучи функциями, также имеют то значение, что они «абстрагируют» реализацию. Это может быть ЛИБО поле или вычисленное («синтетическое») значение. Итак, если у меня есть свойство bean-компонента под названием «zipcode», оно начинается как сохраненная строка. Теперь предположим, что я хочу изменить его на значение, вычисленное из адреса / города / штата?
Если я использую поле, этот код ломается:
String zipcode = address.zipcode();
Но если я использую геттер, это не сломается:
String zipcode = address.getZipcode();
В JavaScript нет ничего похожего на JavaBeans. Насколько я читал, предполагаемое значение GET и SET ограничено вышеупомянутыми «синтетическими» (вычисленными) свойствами.
Но это несколько лучше, чем java в том, что, хотя Java не позволяет вам совместимо преобразовывать «поле» в метод, ES6 GET и SET позволяют это.
То есть, если у меня есть:
var zipcode = address.zipcode;
Если я изменю zipcode из стандартного свойства объекта на геттер, то приведенный выше код теперь вызывает функцию GET.
Обратите внимание: если бы я не включил GET в определение, это НЕ будет вызывать метод GET почтового индекса. Вместо этого он просто назначит функцию zipcode переменной.
Итак, я думаю, что это некоторые важные различия для понимания между методами получения и установки Java и JavaScript ES6.