我已经看到可以使用对象文字表示法来定义一个带有getter的对象:
var foo = {
get bar() { return 3; }
}
是否有一些对象文字语法允许我在上面设置“bar”的其他属性描述符属性,例如'enumerable'?
或者,'获取/设置'是ECMAScript5对象文字表示法支持的唯一属性描述符属性吗?
答案 0 :(得分:1)
一个好问题......但我不认为可以做到。
get
和set
被定义为与property descriptors行为相同的运算符:
Object.defineProperty(foo, "bar", {value : 3,
writable : true,
enumerable : true,
configurable : true,
get : function(){ return value; },
set : function(newValue){ value = newValue;}
});
浏览javascript operator list除了get和set之外,我没有看到与其他描述符类似的内容。
答案 1 :(得分:1)
不,你将不得不使用Object.defineProperty
。
这是the specs所说的:
<强> ObjectLiteral:强>
{ } { PropertyNameAndValueList } { PropertyNameAndValueList , }
<强> PropertyNameAndValueList:强>
PropertyAssignment PropertyNameAndValueList , PropertyAssignment
<强> PropertyAssignment:强>
PropertyName : AssignmentExpression get PropertyName() { FunctionBody } set PropertyName( PropertySetParameterList ) { FunctionBody }
答案 2 :(得分:0)
您唯一可能想要使用的是setter语法,但您可能已经知道了。
某些浏览器支持__proto__
属性,该属性允许您设置对象原型,但它未指定,可能每天都会被删除。
像常规属性名称一样使用它:
var foo = {
__proto__: bar
};