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
。
我有一个 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
。