ตัวรับและตัวตั้งค่า ES6 มีแรงจูงใจที่แตกต่างกันอย่างมากจากแนวคิดที่คล้ายกันใน Java
ใน Java getters และ setters อนุญาตให้คลาสกำหนด JavaBean จุดสำคัญของ getters และ setters คือการอนุญาตให้ bean มี "ส่วนต่อประสาน" ที่ตั้งฉากกันอย่างสมบูรณ์จากที่โดยนัยของฟิลด์สาธารณะ ดังนั้นฉันสามารถมีฟิลด์ "ชื่อ" ที่ไม่ใช่คุณสมบัติ JavaBean และฉันสามารถมี "ที่อยู่" คุณสมบัติ JavaBean ที่ไม่ใช่ฟิลด์
คุณสมบัติ JavaBean ยัง "ค้นพบได้" โดยเฟรมเวิร์กหลายพันเฟรม (ตัวอย่างเช่นไฮเบอร์เนต) ผ่านการสะท้อนของ Java ดังนั้นตัวรับและตัวตั้งค่าจึงเป็นส่วนหนึ่งของวิธีมาตรฐานในการ "เปิดเผย" คุณสมบัติของถั่ว
ตัวรับและตัวเซ็ตซึ่งเป็นฟังก์ชันก็มีค่าที่พวกเขา "นามธรรม" ในการนำไปใช้งาน อาจเป็นทั้งฟิลด์หรือค่า ("สังเคราะห์") ที่คำนวณได้ ดังนั้นถ้าฉันมีคุณสมบัติ bean ที่เรียกว่า "zipcode" ซึ่งจะเริ่มต้นเป็นสตริงที่เก็บไว้ ตอนนี้สมมติว่าฉันต้องการเปลี่ยนเป็นค่าที่คำนวณจากที่อยู่ / เมือง / รัฐ?
หากฉันใช้ฟิลด์รหัสนี้จะแบ่ง:
String zipcode = address.zipcode();
แต่ถ้าฉันใช้ getter สิ่งนี้จะไม่ทำลาย:
String zipcode = address.getZipcode();
JavaScript ไม่มีอะไรเหมือน JavaBeans เท่าที่ฉันอ่านมาค่าที่ตั้งใจไว้ของ GET และ SET ถูก จำกัด ไว้ที่คุณสมบัติ "สังเคราะห์" (คำนวณ) ข้างต้น
แต่ค่อนข้างดีกว่า java ในขณะที่ Java ไม่อนุญาตให้คุณแปลง "เขตข้อมูล" เป็นวิธีการที่เข้ากันได้ ES6 GET และ SET ช่วยให้สามารถทำได้
นั่นคือถ้าฉันมี:
var zipcode = address.zipcode;
ถ้าฉันเปลี่ยนรหัสไปรษณีย์จากการเป็นคุณสมบัติออบเจ็กต์มาตรฐานเป็น getter ตอนนี้โค้ดด้านบนจะเรียกฟังก์ชัน GET
โปรดทราบว่าหากฉันไม่ได้รวม GET ไว้ในคำจำกัดความสิ่งนี้จะไม่เรียกใช้เมธอด GET รหัสไปรษณีย์ แต่จะเป็นเพียงการกำหนดรหัสไปรษณีย์ของฟังก์ชันให้กับ var
ดังนั้นฉันคิดว่าสิ่งเหล่านี้เป็นความแตกต่างที่สำคัญในการทำความเข้าใจระหว่าง Java และ JavaScript ES6 getters และ setters