我已经看到可以使用对象文字符号来定义一个带有 getter 的对象,如下所示:
var foo = {
get bar() { return 3; }
}
是否有一些对象文字语法允许我设置上面“bar”的其他属性描述符属性,例如“enumerable”?
或者,“ get/set ”是 ECMAScript5 对象文字表示法支持的唯一属性描述符属性吗?
我已经看到可以使用对象文字符号来定义一个带有 getter 的对象,如下所示:
var foo = {
get bar() { return 3; }
}
是否有一些对象文字语法允许我设置上面“bar”的其他属性描述符属性,例如“enumerable”?
或者,“ get/set ”是 ECMAScript5 对象文字表示法支持的唯一属性描述符属性吗?
一个很好的问题......但我不认为它可以做到。
get
并被定义为与属性描述符set
相同的操作符:
Object.defineProperty(foo, "bar", {value : 3,
writable : true,
enumerable : true,
configurable : true,
get : function(){ return value; },
set : function(newValue){ value = newValue;}
});
浏览 javascript运算符列表,除了 get 和 set 之外,我没有看到其他描述符的任何类似内容。
不,你将不得不使用Object.defineProperty
.
这就是规格所说的:
对象字面量:
{ } { PropertyNameAndValueList } { PropertyNameAndValueList , }
属性名称和值列表:
PropertyAssignment PropertyNameAndValueList , PropertyAssignment
财产分配:
PropertyName : AssignmentExpression get PropertyName() { FunctionBody } set PropertyName( PropertySetParameterList ) { FunctionBody }
您可能还想使用的唯一方法是 setter 语法,但您可能已经知道这一点。
一些浏览器支持__proto__
允许您设置对象原型的属性,但它没有被指定并且可能每天都被删除。
像使用常规属性名称一样使用它:
var foo = {
__proto__: bar
};