[英]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.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';
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"}}}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.