有没有办法完成
{foo: parseFloat("5.5"), bar: foo + 5}
在评估对象文字之前不必定义foo的值?
编辑:很抱歉,我没有说清楚,但我想在原地定义foo,然后从条形值定义中引用它的值。< / p>
答案 0 :(得分:2)
没有。无法访问该文字声明中的文字属性。
如果您觉得自己需要这些功能,可以编写一个函数,为您创建对象,以便在一行代码中完成您要查找的内容,但实际上我建议您使用写两行
var foo = parseFloat("5.5");
var baz = { foo: foo, bar: foo + 5 };
而不是构建你真正不需要的抽象。
答案 1 :(得分:0)
使用“秘密”ES5 getter语法使用 this 执行内联计算以引用文字:
JSON.stringify({
foo: parseFloat("5.5"),
get bar(){return this.foo + 5}
});
// == "{"foo":5.5,"bar":10.5}"
请注意绑定是实时的,因此如果您更新 foo ,那么 bar 将开始等同于新值+ 5.
也不是说“方法”中的“功能”一词拼写为“get”,这不是拼写错误,只是ES5很棒。如果你能在那里使用某种“胖箭”会很好,但我不知道是否/什么时候会发生。为了使属性值真正静态,这可能会在大型集合上保存ram,你可以添加更多的丑陋和轻微的重复:
ob= {
foo: parseFloat("5.5"),
get bar(){ delete this.bar; return this.bar=this.foo + 5; }
};
JSON.stringify(ob); // == "{"foo":5.5,"bar":10.5}"
这是你需要获得中间文字的价值,以及更多(实时更新),希望这对你的项目来说不是太多。如果你不需要它是静态的,我发现它比一个偏离的临时变量更清洁。
注意:这个技巧适用于IE9和更新的浏览器;使用临时变量的临时变量。