Как сказал триптих, за исключением того, что его пример кода (был опасным и неправильным, пока он не отредактировал его) что-то более похожее на следующее было бы лучше.
mylib = mylib || {};
//take objects a and b, and return a new merged object o;
mylib.merge = function(a, b) {
var i, o = {};
for(i in a) {
if(a.hasOwnProperty(i)){
o[i]=a[i];
}
}
for(i in b) {
if(b.hasOwnProperty(i)){
o[i]=b[i];
}
}
return o;
}
//take objects a and b, and modify object a to have b's properties
mylib.augment = function(a, b) {
var i;
for(i in b) {
if(b.hasOwnProperty(i)){
a[i]=b[i];
}
}
return a;
}
править. Свирепый. Глубокая копия - это другая и ортогональная функция, но только для вас, вот моя личная функция глубокой копии
function clone(o) {
var t,i;
if (o === undefined) {
return undefined;
}
if (o === null) {
return null;
}
if (o instanceof Function) {
return o;
}
if (! (o instanceof Object)) {
return o;
} else {
t = {};
for (i in o) {
/* jslint complains about this, it's correct in this case. I think. */
t[i] = clone(o[i]);
}
return t;
}
}