为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript对象:获取父对象

/ 猿问

JavaScript对象:获取父对象

一只萌萌小番薯 2019-10-12 11:07:02

JavaScript对象:获取父对象

我有以下(嵌套)对象:

obj: { subObj: { foo: 'hello world' } };

接下来我要做的是像这样引用子对象:

var s = obj.subObj;

现在,我想要做的是获得对象的引用。obj走出变数s..类似于:

var o = s.parent;

这有可能吗?



查看完整描述

3 回答

?
qq_遁去的一_1

另一个对象(父对象)内的嵌套对象(子对象)不能直接从其父对象获取数据。

看看这个:

var main = {
    name : "main object",
    child : {
        name : "child object"
    }};

如果您问主对象它的子对象名是什么(main.child.name你会得到的。
相反,你不能反之亦然,因为孩子不知道他的父母是谁。
(你可以main.name但你不会得到main.child.parent.name).

顺便说一句,一个函数可以用来解决这条线索。
让我们扩展上面的代码:

var main = {
    name : "main object",
    child : {
        name : "child object"
    },
    init : function() {
        this.child.parent = this;
        delete this.init;
        return this;
    }}.init();

内部init函数,只需调用父对象即可。this.
所以我们定义了parent属性中的child对象。
然后(可选)我们可以删除init方法。
最后,我们将主对象作为输出从init功能。

如果你想main.child.parent.name现在你会做对的。
虽然有点棘手,但效果很好。



查看完整回答
反对 回复 2019-10-13
?
泛舟湖上清波郎朗

这是一个老问题,但当我遇到这个问题时,我想我会把我的答案加到这个问题上,以便在别人遇到同样的问题后尽快帮助他们。

我有这样的结构:

var structure = {
    "root":{
        "name":"Main Level",
        nodes:{
            "node1":{
                "name":"Node 1"  
            },
            "node2":{
                "name":"Node 2"  
            },
            "node3":{
                "name":"Node 3"  
            }
        }
    }}

目前,通过引用其中一个子节点,我不知道如何获得父节点的名称值“主级别”。

现在,我引入了一个递归函数,它遍历结构并向每个节点对象添加一个父属性,并像这样填充它的父对象。

var setParent = function(o){
     if(o.nodes != undefined){
          for(n in o.nodes){
              o.nodes[n].parent = o;
              setParent(o.nodes[n]);
          }
     }}

然后我只调用该函数,现在可以在这个对象树中获取当前节点的父节点。

setParent(structure.root);

如果我现在有一个对根的秒子节点的引用,我可以只调用。

var node2 = structure.root.nodes["node2"];console.log(node2.parent.name);

它将输出“主要水平”。

希望这能帮上忙.。



查看完整回答
反对 回复 2019-10-13
?
倚天杖

没有。不可能知道它来自哪个对象。

sobj.subObj两者都只是对同一个对象的引用。

你也可以这样做:

var obj = { subObj: {foo: 'hello world'} };var obj2 = {};obj2.subObj = obj.subObj;var s = obj.subObj;

你现在有三份推荐信,obj.subObjobj2.subObj,和s,同样的对象。它们都不是特别的。



查看完整回答
反对 回复 2019-10-13

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信