getter

get 语法将一个对象属性绑定到查询该属性时将被调用的一个函数上。

语法

{get prop() { ... } }
{get [expression]() { ... } }

参数

prop
要绑定到给定函数的属性名
expression
从ECMAScript 2015 (ES6)开始,还可以使用一个计算的属性名的表达式绑定到给定的函数。

说明

有时候希望访问属性时能返回一个动态计算后的值, 或希望不通过使用明确的方法调用而显示内部变量的状态.在JavaScript中, 能通过使用 getter 实现. 尽管可能结合使用getter和setter创建一个伪属性,但不能既使用getter绑定到一个属性上,同时又用该属性真实的存储一个值.

使用get语法时应注意以下问题:

可通过 delete 操作符删除getter.

实例

在新对象初始化时定义一个getter

这会为obj创建一个虚假的属性latest, 该属性会返回log数组的最后一个元素.

var log = ['test'];
var obj = {
  get latest () {
    if (log.length == 0) return undefined;
    return log[log.length - 1]
  }
}
console.log (obj.latest); // Will return "test".

注意,试图赋给latest新值的话不会改变该值.

使用delete操作符删除getter

只需使用 delete ,就可删除getter:

delete obj.latest;

使用defineProperty在存在的对象上定义 getter

在任意时间添加getter到一个存在的对象,使用 Object.defineProperty().

var o = { a:0 }
Object.defineProperty(o, "b", { get: function () { return this.a + 1; } });
console.log(o.b) // Runs the getter, which yields a + 1 (which is 1)

使用计算后的属性名

注意: 计算后的属性为体验性的技术, 作为 ECMAScript 6 提议的一部分, 暂时还没有被大部分的浏览器支持. 在不支持的环境中使用会引发一个语法错误.

var expr = "foo";
var obj = {
  get [expr]() { return "bar"; }
};
console.log(obj.foo); // "bar"

规范

Specification Status Comment
ECMAScript 5.1 (ECMA-262)
Object Initializer
Standard Initial definition.
ECMAScript 2015 (6th Edition, ECMA-262)
Method definitions
Standard Added computed property names.

浏览器兼容性

基于 Robert Nyman's page. 不支持 (尤其是在 IE6-8) 表示该脚本会引发语法错误.

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 1 2.0 (1.8.1) 9 9.5 3
Computed property names 未实现 34 (34) 未实现 未实现 未实现
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) 1.0 (1.8.1) (Yes) (Yes) (Yes)
Computed property names 未实现 未实现 34.0 (34.0) 未实现 未实现 未实现

相关链接

文档标签和贡献者