Object.clone = function clone(o, copyProto, copyNested){
function Create(i){
for(i in o){
if(o.hasOwnProperty(i)) this[i] = ( copyNested && typeof o[i] == "object" )
? clone(o[i], true, true) : o[i];
}
}
if(copyProto && "__proto__" in o) Create.prototype = o.__proto__; //IE затупит
return new Create();
}
//o - Целевой объект
//copyProto - будет ли скопирован прототип объекта
//copyNested - будут ли клонированы объекты, вложенные в текущий или сохранятся в виде ссылок
var target = {
"A" : {
"Z" : 1,
"X" : 2,
"Y" : {
"F" : 3,
"G" : 4
}
}
};
target.__proto__.f = function(){};
var clone1 = Object.clone(target, false, true);
clone1.f //undefined
clone1.A == target.A //false
var clone2 = Object.clone(target, true);
clone2.f //function
clone2.A == target.A //true