ES6, що вживають і встановлюють, мають суттєво іншу мотивацію, ніж аналогічні поняття в Java.
У Java геттери та сетери дозволяють класу визначати JavaBean. Суть геттерів та сеттерів полягає в тому, що це дозволяє бобі мати цілком ортогональний «інтерфейс» від того, що мається на увазі у публічних полях. Тож у мене може бути поле "name", яке НЕ є властивістю JavaBean, і я можу мати "адресу" властивості JavaBean, що НЕ є полем.
Властивості JavaBean також "відкриваються" тисячами фреймів (наприклад, у сплячому режимі) за допомогою відображення Java. Таким чином, геттери та сетери є частиною стандартного методу "опромінення" властивостей квасолі.
Геттери і сетери, будучи функціями, також мають значення, яке вони "абстрагують" реалізацією. Це може бути ВСЕ поле або обчислене ("синтетичне") значення. Тож якщо у мене є властивість bean під назвою "zipcode", вона починається як збережена рядок. Тепер припустимо, я хочу змінити це на значення, обчислене з адреси / міста / штату?
Якщо я використовую поле, цей код порушується:
String zipcode = address.zipcode();
Але якщо я використовую геттер, це не порушує:
String zipcode = address.getZipcode();
JavaScript не має нічого подібного до JavaBeans. Наскільки я читав, передбачуване значення GET і SET обмежене вищенаведеними "синтетичними" (обчисленими) властивостями.
Але це дещо краще, ніж java, тому що Java не дозволяє сумісно перетворити "поле" в метод, ES6 GET і SET це дозволяє.
Тобто, якщо у мене є:
var zipcode = address.zipcode;
Якщо я зміню поштовий індекс із стандартного властивості об'єкта на геттер, тепер наведений вище код викликає функцію GET.
Зауважте, що якщо я не включив GET у визначення, це НЕ посилатиметься на метод GET zipcode. Замість цього, він буде просто призначити функцію zipcode для var.
Тому я думаю, що це кілька важливих відмінностей для розуміння між Getter і сетерами Java та JavaScript ES6 JavaScript.