2013-08-24 3 views
3
var obj1 = New MyObject('Object 1'); 
var obj2 = New MyObject('Object 2'); 

var foo = { anObject : obj1 }; 

foo.anObject = obj2; 
console.log(obj1.name); 

당연히 obj1은 변경되지 않았습니다. 하지만 내가 foo에만 액세스 할 수 있다고 가정하고 전체 스크립트에서 obj1obj2으로 대체하는 방법은 무엇입니까?javascript - 다른 개체로 바꾸기

+0

당신이 –

+0

코드를 요구하는 분명한 +를 참조 할 때'foo.anObject' 대신 obj1''로 사용되지 않습니다. –

+0

대체 무엇을 "* 전체 스크립트 *"로 바꾸시겠습니까? – Bergi

답변

4

obj1의 모든 속성을 제거한 다음 obj2의 모든 속성을 추가해야합니다. 그러나 obj1은 obj2와 동일한 객체에 대한 참조를 보유하지 않지만 새로운 복제 된 객체를 만듭니다. 또한 대상으로 a과 같습니다 얕은 복제주의 :

var replaceObject = function(a, b) { 
    var prop; 

    for (prop in a) delete a[prop]; 
    for (prop in b) a[prop] = b[prop]; 
}; 

var a = {a: 1}, 
    b = {b: 2}; 

replaceObject(a, b); 

a // {b: 2}; 
// but: 
a === b // false 
+0

이상적인 해결책은 아니지만 이상적인 경우는 아닙니다. +1 간단하고 깨끗한 솔루션 –

+0

그것은 내가 지금하고있는 것에 효과적이지만 깨끗한 해결책이 아닙니까? – Lithy

+0

라인 5의 루프 본문은 'a [prop] = b [prop];'가되어야합니까? –

관련 문제