从嵌套对象文字返回属性名称

时间:2018-08-31 22:33:13

标签: javascript

我有一个对象,我正在尝试获取方法的父属性的名称。

var a = {b: {c: function() {return // I want "b" }}}

这可能吗?

2 个答案:

答案 0 :(得分:1)

不可能。当变量对象包含对函数的引用时,则没有相反的引用。也可以有多个引用,例如

var a = {b: {c: function() {return // I want "b" }}}
var x = {y: {z: a.b.c}};

现在a.b.cx.y.z是同一个函数,怎么知道要返回b还是y

但是请注意,当您将该函数调用为

a.b.c()

它接收a.b value 作为this中的上下文。因此,您可以执行以下操作:

var a = {
  b: {
    c: function() {
      console.log(this.d);
    },
    d: 1
  }
};

var x = {
  y: {
    z: a.b.c,
    d: 10
  }
};

a.b.c();
x.y.z();

但是,这仍然不能帮助您获得属性名称b

答案 1 :(得分:1)

您可以声明一个函数来迭代包含函数的对象,但是我们必须知道主要对象(在本例中为 a )。

要调用该函数,由于我们不知道 b ,因此必须迭代 a 的属性和嵌套对象才能找到它。

var a = {b: {c: function() {for(p in a)console.log(p) }}}

for(p in a){
    for(p2 in a[p]){
        a[p][p2]();
    }
}

我可能是在强制执行规则,因为您没有对主要对象(a)讲任何话,但是这里的想法是从头开始并逐步实现目标。