Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

getter

概览

get 语句作为函数绑定在对象的属性上,当访问该属性时调用该函数.

语法

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

参数

prop
待绑定函数的属性的名称.
expression
从ECMAScript 6开始, 可以使用表达式作为函数名称绑定在属性上.

说明

有时候希望访问属性时能返回一个动态计算后的值, 或希望不通过使用明确的方法调用而显示内部变量的状态.在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 6 (ECMA-262)
Method definitions
Release Candidate 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) 未实现 未实现 未实现

相关链接

文档标签和贡献者

 此页面的贡献者: teoli, yenshen
 最后编辑者: teoli,