比方说,我有以下对象:这会复制对象还是添加对它的引用?
var lol = {
section: {},
other: {foo: 'bar', foob: 'baz'}
};
现在,如果我做了以下内容:
lol.section.other = lol.other;
将基准进行链接section.other
到other
或将整个other
对象被复制并放置在section
?
比方说,我有以下对象:这会复制对象还是添加对它的引用?
var lol = {
section: {},
other: {foo: 'bar', foob: 'baz'}
};
现在,如果我做了以下内容:
lol.section.other = lol.other;
将基准进行链接section.other
到other
或将整个other
对象被复制并放置在section
?
您正在创建对同一个对象的两个引用。
Javascript对象是从来没有隐式复制。
耶!完美:D –
是的,如果你有兴趣,jQuery有一个方便的方法,$ .extend(),它可以让你深入克隆对象(通过传递真正的第一个参数)。 http://api.jquery.com/jQuery.extend/ – InfinitiesLoop
您可以通过创建一个新对象并添加键/值来模仿复制行为,也许在一个循环中? – dizas
与其他OO语言一样,JavaScript也会通过引用传递和指定对象,因此,您只会创建对现有对象的新引用。
JavaScript从其他OO语言中脱离出来的地方是继承和封装。所以在这些领域要谨慎。
正如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/。
你为什么不简单地通过一个引用来添加一个属性来测试它,看看它是否可以通过其他引用? – user113716