Get to know MDN better
要绑定到给定函数的属性名。
expression从 ECMAScript 2015 开始,还可以使用一个计算属性名的表达式绑定到给定的函数。
有时需要允许访问返回动态计算值的属性,或者你可能需要反映内部变量的状态,而不需要使用显式方法调用。在 JavaScript 中,可以使用 getter 来实现。
尽管可以结合使用 getter 和 setter 来创建一个伪属性,但是不可能同时将一个 getter 绑定到一个属性并且该属性实际上具有一个值。
使用get语法时应注意以下问题:
这会为obj创建一个伪属性latest,它会返回log数组的最后一个元素。
注意,尝试为latest分配一个值不会改变它。
只需使用 delete,就可删除 getter:
要随时将 getter 添加到现有对象,使用 Object.defineProperty().
Getters 给你一种方法来定义一个对象的属性,但是在访问它们之前不会计算属性的值。getter 延迟计算值的成本,直到需要此值,如果不需要,你就不用支付成本。
一种额外的优化技术是用智能 (或称记忆化)getters 延迟属性值的计算并将其缓存以备以后访问。该值是在第一次调用 getter 时计算的,然后被缓存,因此后续访问返回缓存值而不重新计算它。这在以下情况下很有用:
备注:这意味着你不应该为你希望更改其值的属性使用懒 getter,因为 getter 不会重新计算该值。
在以下示例中,对象具有一个 getter 属性。在获取属性时,该属性将从对象中删除并重新添加,但此时将隐式显示为数据属性。最后返回得到值。
对于 Firefox 代码,另请参阅定义defineLazyGetter() 函数的XPCOMUtils.jsm代码模块。
当使用 get 关键字时,它和Object.defineProperty() 有类似的效果,在classes中使用时,二者有细微的差别。
当使用 get 关键字时,属性将被定义在实例的原型上,当使用Object.defineProperty()时,属性将被定义在实例自身上。
| ECMAScript® 2027 Language Specification # sec-method-definitions |
启用 JavaScript 以查看此浏览器兼容性表。