使用其他对象的方法构造对象作为属性名称get Syntax Error: Unexpected token .
时 - 找不到正确的语法
var R = function(a) { this.arg = a; }; R.prototype.name = function() { return this.arg; } var r1 = new R('abc'); var name1 = r1.name(); // => "abc" var o1 = { 'abc': r1 } // this works with constant var o2 = { name1: r1 } // does not work with variable (see answer) var o3 = { r1.name(): r1 } // this fails - syntax var o4 = { 'abc': r1.name() } // this works
尝试了{ (r1.name()): r1 }
,但也失败了。
请注意字符串和整数被评估为bareword
s,而方法和变量则不是:
var o5 = { e.1: 123 } // fails var o6 = { 'e.1': 123 } // succeeds var o7 = { 1: 123 } // succeeds var o8 = { '1': 123 } // same as o7
答案 0 :(得分:3)
var o2 = { name1: r1 } // this works with variable
这与以下含义相同:
var o2 = { 'name1': r1 }
换句话说,它仍然将name1
视为文字字符串。对象文字中的键必须是常量或所谓的“裸字” - 这是对语言的限制。变量和函数调用不能用作对象文字中的键(但它们可以用作值)。使用变量似乎可行,但变量名将用作键而不是变量的值。
您必须执行以下操作:
var o2 = {};
o2[name1] = r1;
var o3 = {};
o3[r1.name()] = r1;
答案 1 :(得分:0)
var o4 = { 'abc', r1.name() }
这个应该是:
var o4 = { 'abc': r1.name() }
答案 2 :(得分:0)
您可以创建自己的属性设置器
function setProperty (prop,val,obj) {
if (typeof prop === "undefined" || typeof val === "undefined") return undefined;
if (typeof obj === "undefined") obj = {};
obj[prop] = val;
return obj;
}
// use 1
var o1 = setProperty(r1.name(),r1);
// use 2
var o2 = {};
setProperty(r1.name(),r1,o2);