设置值正在改变键名

时间:2011-01-24 17:28:44

标签: javascript object key overwrite

var test = {
    one: {},
    two: {},
};
test['two'].parent = test['one'];

我想要测试的内容:

test = {
   one: {},
   two: { parent: {}, }

实际上有什么:

 test = {
    parent: {},
    two: { parent: {}, }

为什么test.one会成为test.parent?

我希望test.two.parent保存对test.one的引用。我该怎么做?

3 个答案:

答案 0 :(得分:3)

您使用的浏览器是什么?它可能会有所作为。

我在Firefox上接收Firebug中的预期结果测试,但我不建议混合和匹配属性访问语法(syntaxes?syntaxen?)。

而不是:

test['two'].parent = test['one'];

我愿意:

test['two']['parent'] = test['one'];

答案 1 :(得分:3)

  

为什么test.one会成为test.parent?

没有。得到的结构是:

{
one: {},
two: { parent: {} }
}

其中parent引用one引用的同一对象。

如果你这样做:

test.one.cheese = "crackers";

...下面的结果将是“破解者”

alert(test.two.parent.cheese); // "crackers"

示例: http://jsfiddle.net/g5chF/

答案 2 :(得分:1)

您对此声明的作用的声明:

test['two'].parent = test['one'];

不正确。代码已经执行了您想要的操作:它向test.two添加了一个“父”属性,因此test.two.parent处会有一个空对象。