2013-01-09 1 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} 

이것은 기본적으로 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.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

그게 당신이 요구하는 것이라면, Alex Wayne이 당신의 대답을 가지고 있습니다. 변수는 js에서 참조가 될 수 없으며 할당 할 수없는 참조를 보유합니다. – bfavaretto

+0

그래서 iframe1.map_data는 iframe2.map_data에 대한 참조를 보유합니다. iframe1.map_data = null 후, iframe1.map_data에 대한 참조는 무엇입니까? – Mahks

관련 문제