我想根据另一个属性为某个命名空间定义属性。以下是我尝试根据someNameSpace.x2
分配someNameSpace.x1
:
someNameSpace = {
x1: 100,
x2: x1 * 0.5,
};
但它失败了。这样做的正确方法是什么?
答案 0 :(得分:3)
您不能这样做,因为范围内尚未定义x1
。
someNameSpace = { x1 : 100 };
someNameSpace.x2 = someNameSpace.x1 * 0.5;
答案 1 :(得分:1)
您无法在定义自身的对象文字中引用该对象。
var something = { x: 3 };
something.x2 = something.x * 2;
你可以申报;然后在声明后添加您想要的任何属性。
答案 2 :(得分:1)
someNameSpace = {
x1: 100,
get x2(){return this.x1 * 0.5},
};
someNameSpace.x2; // 50
someNameSpace.x1 = 5;
someNameSpace.x2; // 2.5
使用吸气剂而不是像所有其他傻瓜一样作弊。现在,属性x2
的值真正取决于x1
:P
答案 3 :(得分:0)
这是一个使用自执行功能的技巧:
var someNameSpace = (function(){
var x1 = 100;
return {
x1: x1,
x2: x1 * 0.5
};
})();
答案 4 :(得分:0)
你可以这样做:
someNameSpace = {
x1: 100
}
someNameSpace.x2 = x1 * 0.5;
答案 5 :(得分:0)
您可以定义一个返回值
的函数var NS = {
x1: 100,
computeX2: function(){
return this.x1 * 0.5;
}
}
像ember.js这样的一些javascript框架允许你以这种方式定义所谓的“计算属性”。