繁体   English   中英

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"

正如你所看到的,通过深度复制对象XX2 ,通过简单地改变的值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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM