簡體   English   中英

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.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM