我需要在子元素的函数中访问包含元素的变量。我怎样才能做到这一点?
object = {
a : {
c : function() {
//need to access b here
},
d : 2
},
b : 1
};
在这种情况下,我需要访问函数b
中的变量c
。我尝试了bind()
的一些变化,但没有任何效果。问题JavaScript access parent object attribute对我不起作用。我无法访问变量object
,因为对象更深层嵌套。
答案 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