2

我已经看到可以使用对象文字符号来定义一个带有 getter 的对象,如下所示:

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

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

或者,“ get/set ”是 ECMAScript5 对象文字表示法支持的唯一属性描述符属性吗?

4

3 回答 3

1

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

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 之外,我没有看到其他描述符的任何类似内容。

于 2012-04-18T19:16:34.310 回答
1

不,你将不得不使用Object.defineProperty.

这就是规格所说的:

对象字面量:

{ }
{ PropertyNameAndValueList }
{ PropertyNameAndValueList , }

属性名称和值列表:

PropertyAssignment
PropertyNameAndValueList , PropertyAssignment

财产分配:

PropertyName : AssignmentExpression
get PropertyName() { FunctionBody }
set PropertyName( PropertySetParameterList ) { FunctionBody }
于 2012-04-18T20:45:59.837 回答
0

您可能还想使用的唯一方法是 setter 语法,但您可能已经知道这一点。

一些浏览器支持__proto__允许您设置对象原型的属性,但它没有被指定并且可能每天都被删除。

像使用常规属性名称一样使用它:

var foo = {
    __proto__: bar
};
于 2012-04-18T17:34:19.747 回答