1

可能重复:
使用 Javascript 对象键的变量

我不知道我是怎么搞砸的。

我的代码给了我错误:

invalid property id

代码:

 return  { this.Obj.itemid :
               {  Color : this.Obj.color,
                  Name : this.Obj.name,
                  Year : this.Obj.year
                }
           };

我需要将这些哈希作为数组返回(因此返回),但无论我做什么,它要么返回上面的错误,要么 var 引用被字符串化。我实际上无法将其中的动态 js 值作为键。

我试过这个:

" + this.Obj.itemid + "

还有这个:

var itemid = this.Obj.itemid;
return { itemid : {
         //etc..
    }}

有任何想法吗?

4

2 回答 2

7

问题是您不能this.Obj.itemid以这种方式使用。

相反,请尝试以下操作:

var ret={};
ret[this.Obj.itemid]=
   {
      Color : this.Obj.color,
      Name : this.Obj.name,
      Year : this.Obj.year
   };
return ret;
于 2012-11-01T22:13:29.843 回答
4

属性初始值设定项中冒号左侧出现的内容必须是有效的标识符、字符串文字或数字文字。它总是按字面意思使用。this.Obj.itemid这些都不是。

如果您尝试使用 的作为this.Obj.itemid属性名称,则:

var ret = {};
ret[this.Obj.itemid] = {
    Color : this.Obj.color,
    Name : this.Obj.name,
    Year : this.Obj.year
};

这利用了这样一个事实,即您可以将括号表示法与属性名称的任何表达式一起使用。ret[this.Obj.itemid] = ...将创建一个属性,ret其名称是表达式的结果this.Obj.itemid

更简单的例子:

var foo = {};
var b = "bar";
foo[b] = 42;
console.log(foo.bar); // "42"
于 2012-11-01T22:15:21.243 回答