javascript,保存对嵌套对象文字的引用
javascript, saving reference to nested object literal
假设我有以下对象:
name = {
name_one : {
name_one_A : {
name_one_A_a : 'John',
name_one_A_b : 'Kate'
}
}
};
我可以通过以下方式创建对 'John' 的引用:
current_name = name.name_one.name_one_A.name_one_A_a;
假设我多次引用 "name.name_one.name_one_A",有没有办法创建对此嵌套的引用?这不起作用,但类似于:
A = name.name_one.name_one_A;
name = A.name_one_A_b;
'name' 将等于 'Kate'。我知道这不是那样的,但我只是想知道是否有办法做到这一点?
感谢您的帮助!
很难准确地说出你在问什么,这导致了答案之间的一些混乱。
如果您多次引用 name.name_one.name_one_A
,您可以保存一次然后使用它:
var x = name.name_one.name_one_A;
x.name_one_A_a = 'Bill';
x.name_one_A_b = 'Sue';
这只有效,因为 name.name_one.name_one_A
的值是一个对象(对象、数组或函数)。因此,当您将它保存到另一个变量时,您实际上并没有保存对 name.name_one.name_one_A
的引用,而是获取 属性 本身就是一个对象的值。而且,当您随后修改该对象时,由于 name.name_one.name_one_A
也指向同一个对象,您会看到那里的值也发生了变化。
Javascript 无法在对象上创建对特定 属性 的引用,因此您只能使用该引用来更改该 属性 的值.
使用 C/C++ 术语,您不能在 Javascript 中的对象上创建指向 属性 的指针,这样您就可以更改 [=44] 中的值=] 仅使用该指针。
您将不得不传递主机对象和 属性 名称,然后您可以更改该主机对象上 属性 的值。
或者,如果属性的值本身就是一个对象(对象,数组或函数),那么你可以得到属性的值,然后改变它指向的对象到.
因此,在您的数据结构中:
var name = {
name_one : {
name_one_A : {
name_one_A_a : 'John',
name_one_A_b : 'Kate'
}
}
};
无法直接引用:
name.name_one.name_one_A.name_one_A_a
这样您就可以在稍后修改 属性 的内容。相反,你会做这样的事情,在那里你获得对包含对象的引用并使用它:
var obj = name.name_one.name_one_A;
var prop = "name_one_A_a";
// and then some time later:
obj[prop] = 'Bob';
// or
obj.name_one_A_a = 'Bob';
Firefox Scratchpad 有一个名为 "name" 的变量问题,但这有效:
var foo = {
'name_one' : {
'name_one_A' : {
'name_one_A_a' : 'John',
'name_one_A_b' : 'Kate'
}
}
};
var A = foo.name_one.name_one_A;
console.log(A.name_one_A_b);
//yields
凯特
Update:
您可以获得能够更改 属性 值的参考:
var foo = {
'name_one' : {
'name_one_A' : {
'name_one_A_a' : 'John',
'name_one_A_b' : 'Kate'
}
}
};
var A = foo.name_one.name_one_A;
console.log(A.name_one_A_b);
A.name_one_A_b = "bob";
console.log(A.name_one_A_b);
console.log(JSON.stringify(foo));
产量:
"Kate"
"bob"
"{"name_one":{"name_one_A":{"name_one_A_a":"John","name_one_A_b":"bob"}}}"
假设我有以下对象:
name = {
name_one : {
name_one_A : {
name_one_A_a : 'John',
name_one_A_b : 'Kate'
}
}
};
我可以通过以下方式创建对 'John' 的引用:
current_name = name.name_one.name_one_A.name_one_A_a;
假设我多次引用 "name.name_one.name_one_A",有没有办法创建对此嵌套的引用?这不起作用,但类似于:
A = name.name_one.name_one_A;
name = A.name_one_A_b;
'name' 将等于 'Kate'。我知道这不是那样的,但我只是想知道是否有办法做到这一点?
感谢您的帮助!
很难准确地说出你在问什么,这导致了答案之间的一些混乱。
如果您多次引用 name.name_one.name_one_A
,您可以保存一次然后使用它:
var x = name.name_one.name_one_A;
x.name_one_A_a = 'Bill';
x.name_one_A_b = 'Sue';
这只有效,因为 name.name_one.name_one_A
的值是一个对象(对象、数组或函数)。因此,当您将它保存到另一个变量时,您实际上并没有保存对 name.name_one.name_one_A
的引用,而是获取 属性 本身就是一个对象的值。而且,当您随后修改该对象时,由于 name.name_one.name_one_A
也指向同一个对象,您会看到那里的值也发生了变化。
Javascript 无法在对象上创建对特定 属性 的引用,因此您只能使用该引用来更改该 属性 的值.
使用 C/C++ 术语,您不能在 Javascript 中的对象上创建指向 属性 的指针,这样您就可以更改 [=44] 中的值=] 仅使用该指针。
您将不得不传递主机对象和 属性 名称,然后您可以更改该主机对象上 属性 的值。
或者,如果属性的值本身就是一个对象(对象,数组或函数),那么你可以得到属性的值,然后改变它指向的对象到.
因此,在您的数据结构中:
var name = {
name_one : {
name_one_A : {
name_one_A_a : 'John',
name_one_A_b : 'Kate'
}
}
};
无法直接引用:
name.name_one.name_one_A.name_one_A_a
这样您就可以在稍后修改 属性 的内容。相反,你会做这样的事情,在那里你获得对包含对象的引用并使用它:
var obj = name.name_one.name_one_A;
var prop = "name_one_A_a";
// and then some time later:
obj[prop] = 'Bob';
// or
obj.name_one_A_a = 'Bob';
Firefox Scratchpad 有一个名为 "name" 的变量问题,但这有效:
var foo = {
'name_one' : {
'name_one_A' : {
'name_one_A_a' : 'John',
'name_one_A_b' : 'Kate'
}
}
};
var A = foo.name_one.name_one_A;
console.log(A.name_one_A_b);
//yields
凯特
Update:
您可以获得能够更改 属性 值的参考:
var foo = {
'name_one' : {
'name_one_A' : {
'name_one_A_a' : 'John',
'name_one_A_b' : 'Kate'
}
}
};
var A = foo.name_one.name_one_A;
console.log(A.name_one_A_b);
A.name_one_A_b = "bob";
console.log(A.name_one_A_b);
console.log(JSON.stringify(foo));
产量:
"Kate"
"bob"
"{"name_one":{"name_one_A":{"name_one_A_a":"John","name_one_A_b":"bob"}}}"