2012-02-28 57 views
0

我使用文字符号创建对象。是否有可能让一些属性使用先前定义的属性作为它们的值?Javascript对象文字符号,使用函数

例如:

var test = { 
     prop1: obj1, 
     prop2: obj2, 
     prop3: (prop1!=null)?prop1:prop2 
    }; 
+1

请问您能更具体些吗?从你的例子来看,我真的不知道问题的本质是什么,因为你应该能够相当容易地测试它。你有没有更详细的例子让你展示? – thescientist 2012-02-28 20:35:13

+0

http://jsfiddle.net/jDzSC/ – xandercoded 2012-02-28 20:37:27

回答

1

如果你正在尝试做一些像var x = { 'a': 1, 'b': x.a }那么它将无法工作。由于x尚未完成定义。

但你可以这样做

var 
    a = 12, 
    b = 24, 
    c = a + b; // 36 

这是因为每个变种定义顺序解释。基本上相当于

var a = 12; 
var b = 24; 
var c = a + b; 

但是对于对象和数组,整个定义被解释一次。

+0

是的,这就是我一直在寻找的。 – HashTagDevDude 2012-02-28 20:41:05

1

不,是的。

以下是不可能的:

var o = { 
    a : 42, 
    b : o.a //raises a TypeError, o is not defined 
}; 

var o = { 
    a : b : 42 //raises a SyntaxError, unexpected : 
}; 

下,却是:

//referencing a pre-existing variable is obviously possible 
var ans = 42; 
var o = { 
    a : ans, 
    b : ans 
}; 

var o = { 
    a : 42 
}; 
//after the variable has been declared, you can access it as usual 
o.b = o.a; 

如果你觉得用值是一个语句的限制,可以随时使用匿名功能:

var o = { 
    a : (function() { 
     doStuff(); 
     return otherStuff(); 
    }()) 
}; 
0

,让您的例子:

var test = { 
    prop1: obj1, 
    prop2: obj2, 
    prop3: (function() { 
    return (test.prop1!=null)?test.prop1:test.prop2; 
    })() 
};