JavaScript: 如何从 child object 创建对 parent object 的引用?

JavaScript: How to create reference to parent object from child object?

我有一个 object X,它有一个 child Y。 Child Y 是一个包含 object 和函数 Z 的数组。我需要函数 Z 才能使用 this 或类似的东西来引用 X,这意味着它不需要知道 parent 变量的名称。

这是一个例子

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"

如您所见,通过将 object X 深度复制到 X2,只需更改 a 的值,这应该会反映 [=46] 时的结果=] Z() 来自 X2.

目前this不是指parentobject,我试过用bind(),但没有解决问题。

I need function Z to be able to refer to X using "this" or something similar, meaning that it does not need to know the name of the parent variable.

为此,您必须在使用 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