JavaScript访问父对象属性
我在JS中遇到了一个小问题,我有两个嵌套对象,我想从父对象访问一个变量,如下所示:JavaScript访问父对象属性,javascript,oop,object,Javascript,Oop,Object,我在JS中遇到了一个小问题,我有两个嵌套对象,我想从父对象访问一个变量,如下所示: var parent = { a : 5, child: { b : 3, displayA : function(){ console.log(this.a); //undefined }, displayB : function(){ consol
var parent = {
a : 5,
child: {
b : 3,
displayA : function(){
console.log(this.a);
//undefined
},
displayB : function(){
console.log(this.b);
//displays 3
}
}
}
displayA : function(){
console.log(parent.a);
}
我只想知道如何使parent.child.displayA工作:)(我有需要访问父变量的子对象)
谢谢你的帮助
多谢各位 Javascript是,它不是像PHP或Java那样的常规OOP语言
查看并实现类似的功能
您可能可以通过
窗口访问父对象。如果父对象在全局范围内,则父对象
,但您的示例并不适用于所有情况。没有通用方法让对象子对象知道它是父对象的成员。在您的情况下,可以在displayA()
中直接引用父对象,如下所示:
var parent = {
a : 5,
child: {
b : 3,
displayA : function(){
console.log(this.a);
//undefined
},
displayB : function(){
console.log(this.b);
//displays 3
}
}
}
displayA : function(){
console.log(parent.a);
}
您不需要将父对象放在全局范围内并使用窗口。另一个答案建议使用父对象;由于您在parent
的范围内声明displayA
,该函数将关闭parent
,并且可以在child
中的任何位置访问该函数。由于闭包包含对父对象的引用,您将看到对父对象的更改将反映在displayA
的行为中。例如,假设父项
和子项
的定义与示例中相同,但displayA
被修改为使用parent.a
。然后:
parent.child.displayA(); //=> 5
parent.a = 10;
parent.child.displayA(); //=> 10
综上所述,如果您试图模仿OOP,那么另一个答案是正确的:您应该阅读更多关于Javascript原型链如何工作的内容 我认为这样做没有意义,因为您只能通过其父对象访问子对象。那么,为什么要在可以将mthod displayB添加到可以访问所有子属性的父级时将其添加到子级呢。您可以使用来设置此
的值:
parent.child.displayA.call(parent); // 5
parent.child.displayA = function(){
console.log(parent.a);
};
parent.child.displayA(); // 5
您也可能对它感兴趣:
或者您可以只使用父项
而不是此
:
parent.child.displayA.call(parent); // 5
parent.child.displayA = function(){
console.log(parent.a);
};
parent.child.displayA(); // 5
在您的示例中,您没有继承。你可以这样做
...
displayA : function(){
console.log(parent.a);
// 5
},
...
parent.child.parent = parent;
parent.child.displayA();
您可以使用super.prop
访问父类属性。当然,只有在使用ES6时。在displayA
函数中,您才引用“this”并试图访问其“a”属性。这里对“this”的调用是指子对象而不是父对象。如果使用构造函数,可以将其父对象的上下文(this)传递给子对象。或者可以使用调用或绑定方法。