繁体   English   中英

JavaScript访问父对象属性

[英]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工作:)(我有需要访问父变量的子对象)

任何帮助表示非常感谢!

您可以使用call来设置的值this

parent.child.displayA.call(parent); // 5

您可能也有兴趣绑定它:

parent.child.displayA = function(){
  console.log(this.a);
}.bind(parent);
parent.child.displayA(); // 5

或者您可以使用parent代替this

parent.child.displayA = function(){
  console.log(parent.a);
};
parent.child.displayA(); // 5

您可以使用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 例如,假设parentchild在您的示例中定义,除了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM