假设我有以下对象:
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'。我知道这不起作用,但我只是想知道是否有办法实现这个目标?
感谢您的帮助!
答案 0 :(得分:3)
很难确切地说出你所问的是什么导致了答案之间的混淆。
如果您多次引用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中创建指向对象属性的指针,这样您就可以仅使用该指针更改该属性中的值。
您必须传递主机对象和属性名称,然后可以更改该主机对象上的属性值。
或者,如果属性的值本身是一个对象(对象,数组或函数),那么您可以获取属性的值,然后更改它指向的对象。
所以,在你的数据结构中:
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';
答案 1 :(得分:0)
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
凯特
更新
您可以获得能够更改属性值的引用:
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"}}}"