2014-03-27 61 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