[英]JavaScript access parent object attribute
我在JS中有一個小問題,我有兩個嵌套對象,我想從父進程中訪問變量,如下所示:
var parent = {
a : 5,
child: {
b : 3,
displayA : function(){
console.log(this.a);
//undefined
},
displayB : function(){
console.log(this.b);
//displays 3
}
}
}
我想知道如何使parent.child.displayA工作:)(我有需要訪問父變量的子對象)
任何幫助表示非常感謝!
您可以使用super.prop
訪問父類屬性。 當然,只有你使用的是ES6。
Javascript是基於原型的 ,它不是像PHP或Java那樣的常規OOP語言。
看看繼承和原型鏈,並實現簡單的Javascript繼承之類的東西。
如果它位於全局范圍內,您可以通過window.parent
訪問父級,但是您的示例在每種情況下都不起作用。
對象child
沒有通用的方法知道它是父對象的成員。 在您的情況下,您可以直接引用displayA()
的父對象,如下所示:
displayA : function(){
console.log(parent.a);
}
您不需要將父項放在全局范圍內,並使用window.parent
作為另一個答案建議; 因為您在parent
范圍內聲明displayA
,所以該函數將關閉parent
,並且可以在child
內的任何位置訪問它。 由於封包含對一個參考parent
的對象,你會看到,以改變parent
會的行為來體現displayA
。 例如,假設parent
和child
在您的示例中定義,除了displayA
被修改為使用parent.a
。 然后:
parent.child.displayA(); //=> 5
parent.a = 10;
parent.child.displayA(); //=> 10
所有這些都說,如果你試圖模仿OOP,那么另一個答案是正確的:你應該閱讀更多關於Javascript原型鏈如何工作的內容。
我認為這樣做並沒有真正做到這一點,因為你只能通過其父對象訪問子對象。 那么為什么要添加一個mthod displayB給孩子,同時你可以將它添加到有權訪問所有子屬性的父級。
在您的示例中,您沒有繼承。 你可以這樣做
...
displayA : function(){
console.log(parent.a);
// 5
},
...
parent.child.parent = parent;
parent.child.displayA();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.