为什么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 ?????????????????????
答案 0 :(得分:5)
这是一个与a扩展b不会重新创建数据的概念有关的问题。如果某些数据是一个对象(如数组),它只是“指向”该数组而不是创建一个新的相同数组。基本上你是存储两个指向同一个数组的指针,所以当你改变一个时,你会改变另一个。
这是一个答案,它更详细地讨论了在Javascript中“克隆”对象的想法。