我有一个对象,我正在尝试获取方法的父属性的名称。
var a = {b: {c: function() {return // I want "b" }}}
这可能吗?
答案 0 :(得分:1)
不可能。当变量对象包含对函数的引用时,则没有相反的引用。也可以有多个引用,例如
var a = {b: {c: function() {return // I want "b" }}}
var x = {y: {z: a.b.c}};
现在a.b.c
和x.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)讲任何话,但是这里的想法是从头开始并逐步实现目标。