2013-08-24 2 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 не изменился. Но как заменить obj1 на obj2 во всем скрипте, предполагая, что я могу получить доступ только к foo?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];»? –

Смежные вопросы