![](/img/trans.png)
[英]How to create a tree (parent-child) object from Array in Javascript
[英]JavaScript: How to create reference to parent object from child object?
我有一个对象X
,其中有一个孩子Y
子项Y
是一个包含具有函数Z
的对象的数组。 我需要函数Z
能够使用this
函数或类似函数引用X
,这意味着它不需要知道父变量的名称。
这是一个例子
let X = {
a: 23,
Y: [
{
Z: function(){
return "a="+this.a
}
}
]
}
X.Y[0].Z() //It must return "a=23"
let X2 = jQuery.extend(true, {}, X, {a: 878});
X2.Y[0].Z() //It must return "a=878"
正如你所看到的,通过深度复制对象X
到X2
,通过简单地改变的值a
运行时,这应该反映的结果Z()
从X2
。
目前, this
还没有指向父对象,我尝试使用bind()
,但是并没有解决问题。
我需要函数Z能够使用“ this”或类似名称引用X,这意味着它不需要知道父变量的名称。
为此,您必须使用已经完成的jQuery.extend
进行深层复制后,绑定Y[0].Z
函数。 这意味着X
不能直接使用,您必须对其进行初始复制。
像这样:
function copy(x, props) {
var rv = jQuery.extend(true, {}, x, props);
rv.Y[0].Z = rv.Y[0].Z.bind(rv); // ***
return rv;
}
现场示例:
let X = { a: 23, Y: [ { Z: function(){ return "a=",this.a } } ] } function copy(x, props) { var rv = jQuery.extend(true, {}, x, props); rv.Y[0].Z = rv.Y[0].Z.bind(rv); return rv; } let X1 = copy(X); console.log(X1.Y[0].Z()); // "a=23" let X2 = copy(X, {a: 878}); console.log(X2.Y[0].Z()); //"a=878"
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
在Javascript中,数组元素没有引用包含它们的数组。
您需要引用父元素,即X。如果有多个对象(例如X),则需要创建一个循环来访问它们。 然后在X内找到Z
在您的情况下, this
只会引用方法Z
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.