2013-01-09 102 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

相關問題