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"}}}"