Getter dan setter ES6 memiliki motivasi yang jauh berbeda dari konsep serupa di Java.
Di Java, getter dan setter mengizinkan kelas untuk mendefinisikan JavaBean. Inti dari getter dan setter adalah memungkinkan bean memiliki "antarmuka" ortogonal sepenuhnya dari yang tersirat oleh field publik. Jadi saya dapat memiliki sebuah field "name" yang BUKAN merupakan property JavaBean, dan saya dapat memiliki sebuah property "address" JavaBean yang BUKAN sebuah field.
Properti JavaBean juga "dapat ditemukan" oleh ribuan kerangka kerja (Hibernate misalnya) melalui refleksi Java. Jadi, getter dan setter adalah bagian dari metode standar untuk "mengekspos" properti bean.
Getter dan setter, sebagai fungsi, juga memiliki nilai yang "mengabstraksikan" implementasi. Ini bisa SALAH SATU bidang atau nilai yang dihitung ("sintetik"). Jadi jika saya memiliki properti kacang yang disebut "kode pos", itu dimulai sebagai string yang disimpan. Sekarang misalkan saya ingin mengubahnya menjadi nilai yang dihitung dari alamat / kota / negara bagian?
Jika saya menggunakan bidang, kode ini rusak:
String zipcode = address.zipcode();
Tetapi jika saya menggunakan getter, ini tidak akan rusak:
String zipcode = address.getZipcode();
JavaScript tidak memiliki yang seperti JavaBeans. Sejauh yang saya baca, nilai GET dan SET yang dimaksudkan terbatas pada properti "sintetik" (dihitung) tersebut di atas.
Tapi itu agak lebih baik daripada java karena Java tidak memungkinkan Anda untuk secara kompatibel mengubah "field" menjadi metode, ES6 GET dan SET memungkinkannya.
Artinya, jika saya memiliki:
var zipcode = address.zipcode;
Jika saya mengubah kode pos dari properti objek standar menjadi pengambil, kode di atas sekarang memanggil fungsi GET.
Perhatikan bahwa jika saya tidak menyertakan GET dalam definisi, ini TIDAK akan memanggil metode GET kode pos. Sebagai gantinya, itu hanya akan menetapkan kode pos fungsi ke var.
Jadi menurut saya ini adalah beberapa perbedaan penting untuk dipahami antara getter dan setter Java dan JavaScript ES6.