Javascript对象文字表示法,使用函数

时间:2012-02-28 20:32:28

标签: javascript

我正在使用文字符号创建对象。是否有可能让某些属性使用先前定义的属性作为其值?

例如:

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

3 个答案:

答案 0 :(得分:1)

如果您尝试执行var x = { 'a': 1, 'b': x.a }之类的操作,那么它将无效。由于x未完成定义。

但你可以做类似

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

这是因为每个var定义都是按顺序解释的。基本上相当于

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

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

答案 1 :(得分: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();
    }())
};

答案 2 :(得分:0)

保留你的榜样:

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