JavaScript访问父元素

时间:2016-09-05 14:50:00

标签: javascript oop

我需要在子元素的函数中访问包含元素的变量。我怎样才能做到这一点?

object = {
    a : {
        c : function() {
            //need to access b here
        },
        d : 2
    },
    b : 1
};

在这种情况下,我需要访问函数b中的变量c。我尝试了bind()的一些变化,但没有任何效果。问题JavaScript access parent object attribute对我不起作用。我无法访问变量object,因为对象更深层嵌套。

3 个答案:

答案 0 :(得分:1)

a变成吸气剂。

object = {
    get a() {
      var self = this;
      return {
        c: function() {
           return self.b;
        },
        d: 2
      }
    },
    b : 1
};

或者,如果c不需要this来引用d,那么

object = {
    get a() {
      return {
        c: () => this.b,
        d: 2
      }
    },
    b : 1
};

答案 1 :(得分:1)

object深度嵌套并不重要。只需使用object.b

var object;
([{a:[{b:[{c:[{d:[{e:[{f: // deeply nested
  object = {
    a: {
      c: function() {
        console.log(object.b);
      },
      d: 2
    },
    b: 1
  }
}]}]}]}]}]}])[0].a[0].b[0].c[0].d[0].e[0].f.a.c();

答案 2 :(得分:0)

我喜欢Oriol的回答。 : - )

使用闭包的另一种选择。



([{a:[{b:[{c:[{d:[{e:[{f: // deeply nested
  (function (){
    var object = {
      a: {
        c: function() {
          console.log(object.b);
        },
        d: 2
      },
      b: 1
    }
    return object;
  })()
}]}]}]}]}]}])[0].a[0].b[0].c[0].d[0].e[0].f.a.c();




或者,如果有意义,您可以将对象创建移动到单独的函数中(您可以命名该函数)。



function createHierarchy(){
  return ([{a:[{b:[{c:[{d:[{e:[{f:createObject()}]}]}]}]}]}]);
}

function createObject(){
    var object = {
      a: {
        c: function() {
          console.log(object.b);
        },
        d: 2
      },
      b: 1
    }
    return object;
}

var hierarchy = createHierarchy();
hierarchy[0].a[0].b[0].c[0].d[0].e[0].f.a.c();




使用DI容器只需一步即可完成。 :-P

您可能需要graph而不是hierarchy而且您的模型完全错误。