1

为什么 b.first[0] 返回 "t" 以及如何避免这种情况?

我需要 b.first[0] 中的安全“q”

var extend = function(o,p){
    for(prop in p){
        o[prop] = p[prop];
    }
    return o;
};

var a = {first:['q','w']};
var b = {};

extend(b,a);

document.write(a.first[0]); //q
document.write(b.first[0]); //q

a.first[0] = 't';

document.write(a.first[0]); // t
document.write(b.first[0]); // t ?????????????????????
4

1 回答 1

5

这是一个与通过 a 扩展 b 不会从 a 重新创建数据的概念有关的问题。如果某些数据是一个对象(如数组),则它只是“指向”该数组,而不是创建一个新的、相同的数组。本质上,您正在存储两个指向同一个数组的指针,因此当您更改一个时,您会更改另一个。

这是一个答案,它更详细地讨论了在 Javascript 中“克隆”对象的想法。

https://stackoverflow.com/a/728694/1570248

于 2013-04-05T05:53:54.537 回答