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}
这基本上就是你所说的,没有 iframe。
所以属性指向对象,而不是其他属性。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
都引用了同一个对象,而那个对象发生了变化。
这次我们修改共享对象。以前,我们修改了未共享的对象。
看到不同?
我假设你在谈论这个:
// 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
iframe 中,DOM 节点仍将是同一个节点。由于您在其map_data
上创建了属性,因此它将持续存在。将新文档加载到 iframe 中只会修改框架的contentWindow.document
,而不是代表主文档上的框架的节点。
这取决于是什么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}