2

我想根据另一个属性为某个命名空间定义一个属性。以下是我尝试分配someNameSpace.x2的依据someNameSpace.x1

someNameSpace = {
  x1: 100,
  x2: x1 * 0.5,
};

但它失败了。这样做的正确方法是什么?

4

6 回答 6

3

您不能这样做,因为x1尚未在范围内定义。

someNameSpace = { x1 : 100 };
someNameSpace.x2 = someNameSpace.x1 * 0.5;
于 2012-11-21T17:37:46.927 回答
1
someNameSpace = {
  x1: 100,
  get x2(){return this.x1 * 0.5},
};
someNameSpace.x2; // 50
someNameSpace.x1 = 5;
someNameSpace.x2; // 2.5

使用吸气剂而不是像所有其他傻瓜一样作弊。财产的价值x2现在真正取决于x1:P

于 2012-11-21T17:47:22.917 回答
1

您不能在定义自身的对象文字中引用该对象。

var something = { x: 3 }; 
something.x2 = something.x * 2;

你可以声明它;然后在声明后添加您想要的任何属性。

于 2012-11-21T17:37:51.377 回答
0

这是一个使用自执行函数的技巧:

var someNameSpace = (function(){
    var x1 = 100;
    return {
        x1: x1,
        x2: x1 * 0.5
    };
})();

http://jsfiddle.net/T2kyZ/

于 2012-11-21T17:37:32.970 回答
0

您可以定义一个返回值的函数

var NS = {
  x1: 100,
  computeX2: function(){
     return this.x1 * 0.5;
  }
}

一些 javascript 框架(如 ember.js)允许您以这种方式定义所谓的“计算属性”。

于 2012-11-21T17:40:44.103 回答
0

你可以这样做:

someNameSpace = {
    x1: 100
}
someNameSpace.x2 = x1 * 0.5;
于 2012-11-21T17:38:07.127 回答