JavaScript - 用另一个对象替换一个对象

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 ,怎样才能在整个脚本中用 obj2 替换 obj1 呢?


你的问题不太清楚,请提供更多细节。 - Billy Moon
你的代码中,当引用 obj1 时,请使用 foo.anObject - Fabrício Matté
你想在整个脚本中替换什么? - Bergi
@BillyMoon @Bergi 我只需要一个指针。在C语言中,应该是 foo.anObject = &obj1 然后 *(foo.anObject) = obj2 - Lithy
1个回答

5

您需要删除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

这并不是最理想的解决方案,但也不是最糟糕的情况。对于简单清晰的解决方案点个赞。 - gion_13
它对我现在所做的工作有效,但是没有更简洁的解决方案吗? - Lithy
第5行的循环体应该是“a[prop] = b[prop];”吗? - Dapeng Li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接