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
決してプロパティをリンクしません。両方のプロパティが同じオブジェクトを指すように設定するだけです。
後でこれらのプロパティの 1 つを別のオブジェクトにポイントしても、他のプロパティは変更されません。
ただし、複数のプロパティが指すオブジェクトを変更すると、意味のある変更を反映できます。
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}