与Java中的类似概念相比,ES6获取器和设置器的动机大不相同。
在Java中,getter和setter允许类定义JavaBean。获取器和设置器的要点是,它允许bean具有与公共字段所隐含的接口完全正交的“接口”。因此,我可以有一个不是JavaBean属性的字段“名称”,而我可以有一个不是字段的JavaBean属性“地址”。
JavaBean属性还可以通过Java反射被数千个框架(例如,Hibernate)“发现”。因此,getter和setter是“暴露” bean属性的标准方法的一部分。
作为函数的获取器和设置器也具有它们“抽象”实现的价值。它既可以是字段,也可以是计算值(“合成”)。因此,如果我有一个名为“ zipcode”的bean属性,则该属性以存储的字符串开头。现在假设我想将其更改为根据地址/城市/州计算得出的值?
如果使用字段,此代码将中断:
String zipcode = address.zipcode();
但是,如果我使用吸气剂,则不会中断:
String zipcode = address.getZipcode();
JavaScript没有像JavaBeans这样的东西。据我所读,GET和SET的预期值仅限于前述的“合成”(计算)属性。
但这比Java更好一点,尽管Java不允许您将“字段”兼容地转换为方法,但ES6 GET和SET允许这样做。
也就是说,如果我有:
var zipcode = address.zipcode;
如果我将邮政编码从标准对象属性更改为吸气剂,那么上面的代码现在将调用GET函数。
请注意,如果我未在定义中包含GET,则不会调用邮政编码GET方法。相反,它只会将功能邮政编码分配给var。
因此,我认为这些是理解Java和JavaScript ES6获取器和设置器之间的一些重要区别。