我正在阅读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()
是实现此目的的唯一方法吗?
答案 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; }
});
从链接的文档中可以看出,您还可以指定一组布尔属性(问题中提到的属性),例如writable
,enumerable
和configurable
;只是我提到的第一个语法你不能做的事情。
例如,你也可以:
var obj = {};
Object.defineProperty(obj, 'foo', {
value: 1,
enumerable: true
});
要在问题结束时获得您的要求,并且根本不使用getter。请注意,通过这种方式,您还可以阻止foo
移除delete
属性(默认情况下,writable
和configurable
为false
,因此通过这种方式你确定foo
属性可以枚举。
有关详细信息,请参阅上面的Object.defineProperty
文档。