iframe1.map_data=iframe2.map_data
這是不是將iframe1.map_data
設置爲對iframe2.map_data
的引用?爲什麼變量仍然包含參考對象消失後的數據
當新文件加載到iframe2
時,爲什麼iframe1.map_data
仍包含數據?
iframe1.map_data=iframe2.map_data
這是不是將iframe1.map_data
設置爲對iframe2.map_data
的引用?爲什麼變量仍然包含參考對象消失後的數據
當新文件加載到iframe2
時,爲什麼iframe1.map_data
仍包含數據?
讓我們不會得到在這個困惑的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.a
和obj2.a
都引用相同的對象,並且該對象已更改。
這次我們修改共享對象。在哪裏,我們修改了不共享的對象。
看到區別?
這取決於什麼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}
我假設你在談論這一點:
// 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
,而不是表示主文檔上的框架的節點。
好吧,但我試過iframe2.map_data = null,iframe1.map_data仍然有數據。這是爲什麼? – Mahks
如果這就是你要求的,那麼亞歷克斯韋恩有你的答案。變量不能*在js中被引用,它們只是*保存*引用,你不能指定它們。 – bfavaretto
因此,iframe1.map_data包含對iframe2.map_data的引用。在iframe1.map_data = null之後,iframe1.map_data的引用是什麼? – Mahks
+1對於一個複雜概念的非常清晰的解釋 – Kelvin
在第一個示例中,如果obj1被刪除/更改,obj2.a指向什麼? – Mahks
只有當對象沒有更多的引用指向它們時纔會被刪除。所以他們繼續指向他們被分配的對象,直到他們被告知指向別的東西。 –