Javascript中对象属性的访问函数:

时间:2013-11-30 05:13:25

标签: javascript object properties ecmascript-5

我正在阅读ECMAScript Standard,并看到以下段落( 8.6 部分):

A named accessor property associates a name with one or two accessor functions, and a set of Boolean attributes. The accessor functions are used to store or retrieve an ECMAScript language value that is associated with the property.

假设我正在使用符合ECMAScript标准的Javasript。

标准说:将名称与一个或两个访问者函数关联起来

如何在Javascript中实现Object的属性,该属性只包含 一个 这些访问者函数?即, getter 访问函数?

例如,将值永久存储在Object属性中,而无法更改它。据我所知,对象属性似乎自动带有两个访问器功能。

Object.freeze()是实现此目的的唯一方法吗?

1 个答案:

答案 0 :(得分:2)

您可以简单地使用get糖语法:

var obj = {
  get foo() {
    return 1;
  }
}

console.log(obj.foo) // 1

或者您可以使用Object.defineProperty

var obj = {};

Object.defineProperty(obj, 'foo', {
  get : function() { return 1; }
});

从链接的文档中可以看出,您还可以指定一组布尔属性(问题中提到的属性),例如writableenumerableconfigurable;只是我提到的第一个语法你不能做的事情。

例如,你也可以:

var obj = {};

Object.defineProperty(obj, 'foo', {
  value: 1,
  enumerable: true
});

要在问题结束时获得您的要求,并且根本不使用getter。请注意,通过这种方式,您还可以阻止foo移除delete属性(默认情况下,writableconfigurablefalse,因此通过这种方式你确定foo属性可以枚举。 有关详细信息,请参阅上面的Object.defineProperty文档。