2014-04-02 45 views
0

有沒有一種方法可以從inner()中訪問Parent的屬性,而不必將其引用明確地傳遞給它(正如我在這段代碼中所做的那樣)?如何從內部對象訪問外部父對象javascript

這裏是我的javascript代碼:

function Parent() { 
return { 
    outer: { 
     parent: null, //I want to avoid this 
     name: 'outer', 
     inner: function() { 
      console.log(this.name); 
      console.log(this.parent.name); //how to access parent.name ? 
     } 
    }, 

    name: 'parent' 

}; 
} 

$(document).ready(function() { 

var p = new Parent(); 
p.outer.parent = p; //I want to avoid this 
p.outer.inner(); 

}); 
+2

歸結爲,你不能 – epascarello

+1

[訪問父對象的父對象]可能的副本(http://stackoverflow.com/questions/183702/access-parents-parent-from-javascript-object) – epascarello

回答

2

有從內(),而其參考明確地傳遞給它訪問父的屬性的方法(如我在此代碼做) ?

沒有除名稱/值對之外的對象的結構,對象不知道引用它的東西。關係完全是通過爲屬性賦值並僅在一個方向上工作而創建的:從引用到對象。

對象常量:

var a = {foo: {bar:'bar'}}; 

是相同的:

var a = {}; 
a.foo = {bar:'bar'}; 

其等同於:

var a = new Object(); 
var b = new Object(); 
b['bar'] = 'bar'; 
a['foo'] = b; 

和任何數量的其它類似的製劑。

0

您可以通過此ommit在p分配:

function Parent() { 
return { 
    outer: { 
     parent: this, //keep reference 
     name: 'outer', 
     inner: function() { 
      console.log(this.name); 
      console.log(this.parent.name); //how to access parent.name ? 
     } 
    }, 

    name: 'parent' 

}; 
} 

$(document).ready(function() { 

    var p = new Parent(); 
    p.outer.inner(); 

}); 

但我想這不是你所需要的。

+0

不,那不允許訪問outer的父級,當然也不能訪問'inner()'函數中'p'對象的'parent.name'。 – user13500