2013-01-09 53 views

回答

2

让我们不会得到在这个困惑的iframe。

var obj1 = { 
    a: {test: 123}; 
} 

var obj2 = {}; 
obj2.a = obj1.a; 

// both properties point to the same object. 
obj1.a; // {test:123} 
obj2.a; // {test:123} 

// modify a property of obj1. 
obj1.a = 'abc'; 

// properties point to different objects. 
obj1.a; // 'abc' 
obj2.a; // {test:123} 

这基本上做你在说什么,没有内置页框。

所以属性指向的对象,而不是其他属性。 obj1.a = obj2.a不以任何方式链接属性。它只是将两个属性都设置为指向同一个对象。

如果我稍后将其中一个属性指向另一个对象,它不会更改任何其他属性。


但是,如果修改多个属性指向的对象,则可以传播有意义的更改。

var obj1 = { 
    a: {test: 123}; 
} 

var obj2 = {}; 
obj2.a = obj1.a; 

// modify a property of the shared object. 
obj1.a.test = 456; 

// both properties point to the same object. 
obj1.a; // {test:456} 
obj2.a; // {test:456} 

为什么这样改变呢?因为在这种情况下,obj1.aobj2.a都引用相同的对象,并且该对象已更改。

这次我们修改共享对象。在哪里,我们修改了不共享的对象。

看到区别?

+0

+1对于一个复杂概念的非常清晰的解释 – Kelvin

+0

在第一个示例中,如果obj1被删除/更改,obj2.a指向什么? – Mahks

+0

只有当对象没有更多的引用指向它们时才会被删除。所以他们继续指向他们被分配的对象,直到他们被告知指向别的东西。 –

0

这取决于什么map_data是。如果它是一个对象,那么是的,提供一个参考。如果它像int一样,那么不,它被克隆。

var t = {}, u = {}; 
t.hi = 3; 
u.hi = t.hi; 
t.hi = 4; 
console.log(u.hi); // 3 

t.hi = {x:3}; 
u.hi = t.hi; 
console.log(u.hi) // {x : 3} 
t.hi.x = 2; 
console.log(u.hi) // {x : 2} 

t.hi = 3; 
console.log(u.hi) // {x : 2} 
1

我假设你在谈论这一点:

// Get references to 2 <iframe> nodes 
var iframes = document.getElementsByTagName('iframe'); 
var iframe1 = iframes[0]; 
var iframe2 = iframes[1]; 

// Create a custom property 
iframe2.map_data = { foo : 'bar' }; 
iframe1.map_data = iframe2.map_data; 
iframe2.src = 'http://microsoft.com'; 

// This won't change, regardless of 
// loading a new document into iframe2 
alert(iframe1.map_data.foo); 

iframe2 DOM节点仍然是相同的节点装入一个新的文档转化为一个IFRAME即使经过。既然你在它上面创建了map_data属性,它将会持续。将新文档加载到iframe中只是修改了框架的contentWindow.document,而不是表示主文档上的框架的节点。

+0

好吧,但我试过iframe2.map_data = null,iframe1.map_data仍然有数据。这是为什么? – Mahks

+0

如果这就是你要求的,那么亚历克斯韦恩有你的答案。变量不能*在js中被引用,它们只是*保存*引用,你不能指定它们。 – bfavaretto

+0

因此,iframe1.map_data包含对iframe2.map_data的引用。在iframe1.map_data = null之后,iframe1.map_data的引用是什么? – Mahks

相关问题