2014-03-27 62 views
0

我知道我可以在对象和召回巢对象,他们很容易例如:的Javascript嵌套和调用对象

var ex1 = { 
    data1: 1, 
    dataOb: { 
     data1: 2, 
     data2: ex1.data1 + ex1.dataO.data1, 
    } 
} 

而且我可以做console.log(ex1.dataO.data1),但我不记得从dataObex1.data1例如:data2: ex1.data1 + dataOb.data1没有按” t工作,所以我的问题是有可能从DataOb回想父母对象ex1?

+0

谢谢,但是我就是想不起来了ex1.data1; < – Szarik

+0

重复[在对象字面声明自我引用(HTTP的:// stackoverflow.com/questions/4616202/self-references-in-object-literal-declarations) - 这与未内部对象的问题相同。 – Bergi

+0

你在说什么?除非您之前已经定义了'ex1',即您正在重新定义'ex1',否则不能这样做。没有“回忆”之类的东西。 – freakish

回答

0

不。在您定义data2时,您仍处于定义ex1的中间。也就是说,它并不真还存在呢。您甚至在完成定义之前尝试访问它。

+0

哈,我很愚蠢,谢谢。 – Szarik

+0

是的,没问题。干杯。 –

0

如果我理解你的问题是正确的......你是否想在你创建整个对象的同一句话中使用ex1.data1

这是不可能的!

您想访问尚未创建的引用。

这就像这样:

var a = a + 1; 

如何设置的a值加1,如果a尚未宣布?

+0

谢谢,为我解释了这个问题:> – Szarik

+0

@Szarik没问题 –

0

你可以做这样的事情:

var ex1 = { 
    data1: 1, 
    dataOb: { 
    data1: 2, 
    data2: 4 
    }, 
    getSum: function() { 
    var sum = 0; 
    for (var i = 0; i < arguments.length; i++) { 
     sum += arguments[i]; 
    } 

    return sum; 

    } 
}; 

console.log(ex1.getSum(ex1.data1, ex1.dataOb.data1)); // should log 3 
+0

不是很干净,但你甚至可以把'ex1.dataOb.data'放在一个返回对象中某些属性的方法中。所以从你的例子中,它可能是'ex1.dataOb.data2 = function(){return ex1.data1 + ex1.dataOb.data2}' – Seed