2011-09-27 59 views
0

比方说,我有以下对象:这会复制对象还是添加对它的引用?

var lol = { 
    section: {}, 
    other: {foo: 'bar', foob: 'baz'} 
}; 

现在,如果我做了以下内容:

lol.section.other = lol.other; 

将基准进行链接section.otherother或将整个other对象被复制并放置在section

+0

你为什么不简单地通过一个引用来添加一个属性来测试它,看看它是否可以通过其他引用? – user113716

回答

8

您正在创建对同一个对象的两个引用。

Javascript对象是从来没有隐式复制。

+0

耶!完美:D –

+0

是的,如果你有兴趣,jQuery有一个方便的方法,$ .extend(),它可以让你深入克隆对象(通过传递真正的第一个参数)。 http://api.jquery.com/jQuery.extend/ – InfinitiesLoop

+0

您可以通过创建一个新对象并添加键/值来模仿复制行为,也许在一个循环中? – dizas

2

与其他OO语言一样,JavaScript也会通过引用传递和指定对象,因此,您只会创建对现有对象的新引用。

JavaScript从其他OO语言中脱离出来的地方是继承和封装。所以在这些领域要谨慎。

1

正如SLaks所说,javascript将对象指定为参考(不复制)。这很容易测试或看到自己:

var lol = { 
    section: {}, 
    other: {foo: 'bar', foob: 'baz'} 
}; 

lol.section.other = lol.other; 

lol.other.foo = 'test'; 
console.log(lol.section.other.foo); // will be 'test', not 'bar' 

你可以在这里看到:http://jsfiddle.net/jfriend00/r73LH/

相关问题