具有就地值定义的javascript对象文字

时间:2014-12-25 00:09:49

标签: javascript

有没有办法完成

{foo: parseFloat("5.5"), bar: foo + 5}

在评估对象文字之前不必定义foo的值?

编辑:很抱歉,我没有说清楚,但我想在原地定义foo,然后从条形值定义中引用它的值。< / p>

2 个答案:

答案 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和更新的浏览器;使用临时变量的临时变量。