你能在javascript(ECMAScript5)中使用对象文字符号指定其他描述符属性吗?

时间:2012-04-18 17:30:22

标签: javascript json

我已经看到可以使用对象文字表示法来定义一个带有getter的对象:

var foo = {
            get bar() { return 3; }
          }

是否有一些对象文字语法允许我在上面设置“bar”的其他属性描述符属性,例如'enumerable'?

或者,'获取/设置'是ECMAScript5对象文字表示法支持的唯一属性描述符属性吗?

3 个答案:

答案 0 :(得分:1)

一个好问题......但我不认为可以做到。

getset被定义为与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
};