Javascript 设置值正在更改键名

Javascript 设置值正在更改键名,javascript,object,key,overwrite,Javascript,Object,Key,Overwrite,我想要的是: var test = { one: {}, two: {}, }; test['two'].parent = test['one']; 它实际拥有的: test = { one: {}, two: { parent: {}, } 为什么test.one成为test.parent 我要test.two.parent保存对test.one的引用。我该怎么做呢?您关于此声明的声明: test = { parent: {}, two: {

我想要的是:

var test = {
    one: {},
    two: {},
};
test['two'].parent = test['one'];
它实际拥有的:

test = {
   one: {},
   two: { parent: {}, }
为什么test.one成为test.parent


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

您关于此声明的声明:

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

这是不正确的。代码已经完成了您想要的操作:它向
test.two
添加了一个“parent”属性,这样在
test.two.parent
处就会有一个空对象,您使用的浏览器是什么?这可能会有所不同

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

而不是:

test['two'].parent = test['one'];
我会:

test['two'].parent = test['one'];
为什么test.one成为test.parent

没有。由此产生的结构是:

test['two']['parent'] = test['one'];
其中,
parent
引用的对象与
one
引用的对象相同

如果您这样做:

{
one: {},
two: { parent: {} }
}
…下面的结果将是“饼干”


示例:

完全没有必要;访问或定义属性的任何一种方法都会起作用。@Pointy,我提到了最初的方法是有效的,其余的是保持一致的建议。好吧,我想这是一个很好的观点
test.two.parent=test.one
在这里也可以。你怎么会认为会发生这种情况?不是。很抱歉你是对的,我的问题是在调试器中,它显然有一个bug,它向我显示了上面的输出
test.one.cheese = "crackers";
alert(test.two.parent.cheese); // "crackers"